Mongodb Query: Latest record by date for each item Mongodb Query: Latest record by date for each item mongodb mongodb

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


use findOne instead of find Querydb.collection.findOne({})