我收集+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分钟内以毫秒为单位的模运算将返回当前日期的剩余部分,然后再返回$subtract
以得到一个舍入间隔。
$add
这个操作同样存在,其中纪元日期对象返回一个数值再次返回Date
。
因此,每隔30秒钟就开始分组键。
您可以交替使用日期聚合运算符,但是这会返回一个BSON Date
对象,该对象将在API中转换,而不仅仅是“分钟”间隔的数值。
这只是标准的“日期数学”,因此所有相同的操作都适用。