2017-05-08 138 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