2017-05-08 143 views
0

我有一个mongo集合,可以保存设备的状态记录。因此,每个设备可能有多个记录。我想要做的是通过mongoTemplate创建一个查询,获取每个设备的最新记录。Mongo DB /不重复

这里的约束:

  • 传递一个集<“字符串”> name_ids,蒙戈集合不是_id内定期实地或_id
  • 只获取最新记录每个设备使用中发现匹配名_ID
  • 返回列表<“DeviceStateData”>(无重复应用相同的名_ID找到)COLL的

示例挠度对象:
{
_id: “241324123412”,
名_ID: “飞人”,
电源状态: “ON”,
时间戳:ISODate( '')
}

感谢

回答

0

您可以尝试下面的聚合管道。

下面的查询将$sortname_id随后$groupname_idtimeStamp文件来接从排序文件的第一个。

$$ROOT保留整个文件。

import static org.springframework.data.mongodb.core.aggregation.Aggregation.newAggregation; 
import static org.springframework.data.mongodb.core.query.Criteria.where; 

Aggregation aggregation = newAggregation(
       match(findCriteria), 
       sort(new Sort(Sort.Direction.DESC, "name_id", "timeStamp")), 
       group("name_id").first("$$ROOT").as("latest")); 

List<DeviceStateData> deviceData = mongoTemplate.aggregate(aggregation, DeviceStateData.class, DeviceStateData.class).getMappedResults(); 
+0

不幸的是,我不能够使用Aggregation和当前的spring-data依赖关系,并且不能轻易改变它。尽管谢谢你的回复。 – Sam