我收集+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中轉換,而不僅僅是「分鐘」間隔的數值。
這只是標準的「日期數學」,因此所有相同的操作都適用。