每个项目 mongodb 组按日期的最新记录 [英] Latest record by date for each item mongodb group

查看:80
本文介绍了每个项目 mongodb 组按日期的最新记录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

一个集合中有很多项目,每个项目都有很多记录,有些有新日期的记录,有些有周或/和月的旧记录.我需要一个查询,它返回每个项目的最新记录.在 .aggregate() 的情况下,我需要提交完整的数据".我想要这个结果使用 mongodb $group,每个设备的记录应该是最新的.

There are many items in a collection, each has many records, some have records of new dates and some have week or/and month older. I need a query which returns latest last record of each item. In the case of .aggregate() I need that complete "data" filed. I want this result using mongodb $group, the record should be latest for each device.

   {
    "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 得到这个结果,每个设备的记录应该是最新的.

I want this result using mongodb $group, the record should be latest for each device.

推荐答案

尝试使用以下代码段

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
    }}
]);

在上面的查询组中按设备 ID 和日期,数据和网关 ID 将在每行中最新.

In above query group by device id and date, data, and gateway_id will be latest in each row.

这篇关于每个项目 mongodb 组按日期的最新记录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆