我有一个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 }
提前致谢!
1 回答
免责声明:我不建议在服务器端执行此操作(因此在MongoDB内部),而是在客户端处理该情况 .
也就是说,这是您的问题的通用解决方案,应该可以轻松适应您的具体情况 .
想象一下,您有以下文档(或者像示例中的聚合管道输出):
以下管道将创建空桶(因此
category
字段中的值范围中缺少"gap"值的计数为0的文档 - 在本例中为数字2):上述查询的输出将是: