【发布时间】:2018-10-18 23:26:52
【问题描述】:
我有一个 MongoDB 查询,它根据日期按 5 分钟窗口分组并返回计数(这是使用 count: { $sum: 1 } 的 5 分钟窗口中的文档总数)。
如果该组中不存在文档,我希望查询也为特定的 5 分钟窗口返回计数 0。但是目前,看起来只返回具有正数的组。
当前查询:
const cursor = await collection.aggregate([
{ $sort : { time : 1 } },
{
$match: {
$and: [
{selector: string },
{time: {$gte: timestamp }}
]
}
},
{
$group: {
_id: {
$subtract: [
{ $subtract: [ "$time", 0 ] },
{ $mod: [
{ $subtract: [ "$time", 0 ] },
1000 * 60 * 5
]}
],
},
count: { $sum: 1 }
}
}
])
预期响应:带有文档计数的时间戳,包括总和 0
{ _id: 1525162000000, count: 314 }
{ _id: 1523144100000, count: 0 }
{ _id: 1512155500000, count: 54 }
提前致谢!
【问题讨论】:
-
您必须创建伪造的文档才能让分组提取它们,这通常会有点讨厌。如果可能的话,我会在客户端做这件事。如果您发布一些示例数据和预期结果以及现有的聚合管道,我们可能会为您提供帮助。
-
不确定如何创建虚假文档将帮助我确定哪些 5 分钟窗口没有文档。我已经添加了我的查询和预期结果。谢谢!