【发布时间】:2019-03-03 14:41:37
【问题描述】:
我有一份文档,其中描述了相机在 15 分钟内观察到的不同事物的计数。它看起来像这样:
{
"_id" : ObjectId("5b1a709a83552d002516ac19"),
"start" : ISODate("2018-06-08T11:45:00.000Z"),
"end" : ISODate("2018-06-08T12:00:00.000Z"),
"recording" : ObjectId("5b1a654683552d002516ac16"),
"data" : {
"counts" : {
"5b434d05da1f0e00252566be" : 12,
"5b434d05da1f0e00252566cc" : 4,
"5b434d05da1f0e00252566ca" : 1
}
}
}
data.counts 对象中的键随每个文档更改,并引用稍后获取的其他数据。 data.counts 中有无限数量的键(但通常约为 20)
我正在尝试将所有这些 15 分钟的文档汇总为每日汇总文档。
我现在有这个查询:
db.getCollection("segments").aggregate([
{$match:{
"recording": ObjectId("5bf7f68ad8293a00261dd83f")
}},
{$project:{
"start": 1,
"recording": 1,
"data": 1
}},
{$group:{
_id: { $dateToString: { format: "%Y-%m-%d", date: "$start" } },
"segments": { $push: "$$ROOT" }
}},
{$sort: {_id: -1}},
]);
这会进行分组并返回数组中的所有segments。
我还想汇总data.counts 中的信息,以便获得每日组中所有相同键的值的总和。
这将使我免于在每 15 分钟的分段中使用相同的键对值进行另一个服务循环。例如。查询将返回如下内容:
{
"_id" : "2019-02-27",
"counts" : {
"5b434d05da1f0e00252566be" : 351,
"5b434d05da1f0e00252566cc" : 194,
"5b434d05da1f0e00252566ca" : 111
... any other keys that were found within a day
}
}
如何修改已有的查询,或使用不同的查询?
谢谢!
【问题讨论】:
标签: mongodb aggregation-framework