一个集合中有六台设备,每台设备都有许多记录,有些设备有新日期的记录,有些设备有周或/和月的旧记录。 我需要一个查询来返回每个设备的最新记录。 在 .aggregate() 的情况下,我需要提交完整的“数据”。

这是示例 json。

{
"date_time" : some-date
"device_id" : 27,
"gateway_id" : 1,
"data": [{"r" : 203,"v" : 3642},{"r" : 221,"v" : 3666}]
}
{
"date_time" : some-date
"device_id" : 28,
"gateway_id" : 1,
"data": [{"r" : 203,"v" : 3002},{"r" : 221,"v" : 3006}]
}
{
"date_time" : some-date
"device_id" : 29,
"gateway_id" : 1,
"data": [{"r" : 203,"v" : 3002}, {"r" : 221,"v" : 3006}]
}

我尝试了很多查询,但没有成功。

请注意以下不适用于这种情况。

db.col.find({"device_id": {"$in": devices}, "date_time": { "$gte": last_date}}) .sort({$natural: -1})

db.col.find({"device_id": {"$in": devices}, "date_time": { "$gte": last_date}}) .sort({$natural: -1}).limit(1)

db.col.find({"device_id": {"$in": devices}}) .sort({"date_time": -1}).limit(1)

db.col.find({"device_id": {"$in": devices}}) .sort({"_id": -1}).limit(1)

我正在寻找仅提供集合中每个设备的最新记录的查询。 请注意,在 .aggregate() 的情况下,我需要提交完整的“数据”。

#1楼 票数:14 已采纳

尝试使用以下代码段

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 和日期查询组中,数据和 gateway_id 将在每一行中是最新的。

输出是-

{
    "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
}

谢谢

#2楼 票数:0

使用 findOne 而不是 find 查询 db.collection.findOne({})

  ask by Sajjad Ahmed translate from so

未解决问题?本站智能推荐:

2回复

获取mongodb集合的最新记录

我创建了一个名为“ rooms”的蒙哥数据库。 我想获得最后一个房间来创建下一个房间的ID。 您可以立即看到我的恶心代码: 房间架构 试图得到最后一个房间 然后我尝试运行它并输出“ lastRoom”,我得到了: 我该怎么办?
15回复

如何获取mongodb中的最后N条记录?

我找不到任何有记录的地方。 默认情况下, find() 操作将从头开始获取记录。 如何获取mongodb中的最后N条记录? 编辑:我还希望返回的结果从最近到最近排序,而不是相反。
2回复

搜索有限数量的记录MongoDB

我想搜索我的文档的前1000条记录,其名称是CityDB。 我使用了以下代码: 但它不起作用,它返回前1000个发现,但我想只搜索前1000个记录而不是所有记录。 请你帮助我好吗。 谢谢,阿米尔
2回复

MongoDB:文档,记录和属性之间有什么区别?

文档文档似乎倾向于使用术语“文档”,也指“数据库记录”。 在其他地方,有能力的MongoDB开发人员显然可以互换地使用“ 属性 ”和“ 记录 ”。 在各种情况下使用的正确/官方术语是什么? 它是否记录在mongodb.org的某个地方?
1回复

如何在Mongo DB中查找不同的记录

我在MongodB中插入以下记录 有很多这样的记录。 现在,我想要基于键86、89和90的不同记录。 我正在使用查询db.payloadObject.distinct('dataMap.86'),并且它基于值键86返回不同的记录。 我不了解如何根据这些条件获取价值。
1回复

如何使用Lift Framework自动创建MongoDB索引?

我正在将Lift Framework与Record用作ORM,将Mongo用作数据库。 然后更改使用的索引,转到远程mongo控制台,并手动确保索引。 我想使其自动化,以便Lift将确保服务器每次启动时都具有索引。
1回复

当case类包含scala Enumeration时,如何使用Rogue与MongoCaseClassField更新mongo记录

我正在将现有代码从Rogue 1.1.8升级到2.0.0 , lift-mongodb-record从2.4-M5 to 2.5 。 我在编写包含scala枚举的MongoCaseClassField遇到了困难,我真的可以使用一些帮助。 例如, 当我们尝试写入此字段时,我们收
2回复

每个项目 mongodb 组按日期的最新记录

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