2015-04-03 52 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