我在这里收集10个用于时区调整.相同的基本原理适用于四舍五入为30分钟的日期,不同之处在于,您首先要转换为一个数值,然后通过取模($mod)来计算间隔:
{ "$group": {
"_id": {
"$add": [
{ "$subtract": [
{ "$subtract": [
{ "$add": [ "$createdAt", 1000 * 60 * 60 * 10 ] },
new Date(0)
]},
{ "$mod": [
{ "$subtract": [
{ "$add": [ "$createdAt", 1000 * 60 * 60 * 10 ] },
new Date(0)
]},
1000 * 60 * 30
]}
]},
new Date(0)
]
},
"count": { "$sum": 1 } // or whatever accumulation required
}}
从存储日期(调整后)开始使用纪元日期(Date(0))进行$subtract操作,将以纪元为单位返回自纪元以来的毫秒数作为存储日期的数值. 30分钟内以毫秒为单位的模运算将返回当前日期的余数,然后您再次将其减去以得到四舍五入的间隔.
对于$add操作,也存在相同的情况,其中纪元日期对象为数字值再次返回日期.
因此,从每30分钟开始,现在每个间隔开始都是分组键.
您可以选择使用日期聚合运算符,但这将返回BSON Date对象,该对象将在API中转换,而不仅仅是“分钟”间隔的数字值.
这只是标准的“日期数学”,因此所有相同的操作都适用.