【发布时间】:2020-08-25 20:23:00
【问题描述】:
我正在尝试从 MongoDb 文档中返回应用程序中每个设备的最新读数。
我可以让查询返回整个应用程序的最新读数,但不能返回应用程序中每个单独设备的最新读数。
这是集合中文档的结构:
{
_id: 5f456ab2e836990e5e7d9550,
appID: 'helen-app',
deviceID: 'eleanor-house',
time: 'Tue Aug 25 2020 20:46:58 GMT+0100 (British Summer Time)',
payload: { type: 'Feature', properties: [Object], geometry: [Object] }
}
一个应用程序中有多个设备。
这是当前返回整个应用程序的最新读数的查询,按 deviceID 和时间顺序分组:
col.find({ appID: user.appID }).sort({deviceID: 1, time: -1}).toArray(function(err,res){
console.log(res)
});
我使用了独特的收集方法,它收集与应用程序关联的所有设备,但我无法遍历每个设备以获取最新读数,我觉得在一个查询中完成所有操作会更有效。
有没有办法将独特的功能合并到上面的查询中,以便为每个设备选择最新读数,而不仅仅是整个应用程序?
【问题讨论】:
-
我的第一个想法是你的查询很奇怪。如果您想排序和限制,通常我已经看到它遵循以下模式:
col.find({ appID: user.appID }).sort({ time: -1 }).limit(1)。find()中的第二个{}通常是我的经验中的投影参数。 -
@Taplar 谢谢!!我稍微编辑了代码。我在最后省略了
.limit(),因为我相信这会将整个查询限制为 1 个文档,该文档不会返回每个设备的最新读数。您认为有办法将与投影参数中的独特特征相似的东西放在一起吗?
标签: javascript mongodb mongodb-query aggregation-framework