Mongodb Query: Latest record by date for each item
Try with following snippet
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 }} ])
In above query group by device id and date, data, and gateway_id will be latest in each row.
Output is-
{ "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}
Thanks