ここでの基本的な概念は、特定のクエリ期間の「夏時間」が「開始」と「終了」の両方のタイミングをクエリに「認識」させ、このテストを $cond
使用する「オフセット」を決定するには:
db.collection.aggregate([
{ "$group": {
"_id": {
"$week": {
"$add": [
"$Timestamp",
{ "$cond": [
{ "$and": [
{ "$gte": [
{ "$dayOfyear": "$Timestamp" },
daylightSavingsStartDay
]},
{ "$lt": [
{ "$dayOfYear": "$Timestamp" },
daylightSavingsEndDay
]}
]},
daylightSavingsOffset,
normalOffset
]}
]
}
},
"min": { "$min": "$Timestamp" }
}}
])
したがって、数年をカバーする場合、それをもう少し複雑にすることができますが、それでも基本的な原則です。南半球では、あなたは常に 1年にまたがるので、各条件は「開始」から「年末」および「年の初め」から「終了」の「範囲」になります。したがって、$or
内部の$and
実証された「範囲」内の演算子。
適用する値が異なる場合は、どちらかを「選択する必要がある」時期を検出し、 $cond
。