2015-04-03 54 views
1

集合中有许多项目,每个项目都有很多记录,一些记录了新的日期,一些记录了一周或一个月的旧版本。我需要一个查询返回每个项目的最新最后记录。在.aggregate()的情况下,我需要提交完整的“数据”。我想用mongodb $ group得到这个结果,记录应该是每个设备的最新记录。每个项目的最新记录mongodb group

{ 
    "result" : [ 
     { 
      "_id" : 29, 
      "gateway_id" : 1, 
      "data" : [ 
       { 
        "r" : 203, 
        "v" : 3002 
       }, 
       { 
        "r" : 221, 
        "v" : 3006 
       } 
      ], 
      "device_id" : 29, 
      "date_time" : "a" 
     }, 
     { 
      "_id" : 28, 
      "gateway_id" : 1, 
      "data" : [ 
       { 
        "r" : 203, 
        "v" : 3002 
       }, 
       { 
        "r" : 221, 
        "v" : 3006 
       } 
      ], 
      "device_id" : 28, 
      "date_time" : "b" 
     }, 
     { 
      "_id" : 27, 
      "gateway_id" : 1, 
      "data" : [ 
       { 
        "r" : 203, 
        "v" : 3642 
       }, 
       { 
        "r" : 221, 
        "v" : 3666 
       } 
      ], 
      "device_id" : 27, 
      "date_time" : "a" 
     } 
    ], 
    "ok" : 1 
} 

我想用mongodb $ group得到这个结果,每个设备的记录应该是最新的。

回答

2

尝试与由设备ID和日期,数据下面的代码片断

db.collection.aggregate([ 
      {$group: { 
       "_id": "$device_id", 
       "gateway_id": {"$last":"$gateway_id"}, 
       data: {$last: '$data'}, 
       date: {$last: '$date_time'}, 
      }}, 
     {$project: { 
       "device_id": "$_id", 
        "gateway_id": "$gateway_id", 
        "data": "$data", 
        "date_time": "$date" 
       }}, 
     {$sort: { 
       'date': -1 
      }} 
    ]) 

在上述查询组,和gateway_id将每行中的最新。

+0

谢谢#Sajjad,这对我很有用 – Manahil 2015-04-03 09:40:30

+0

不客气 – 2015-04-03 09:41:40