Základním konceptem je, aby si váš dotaz „uvědomil“, kdy „začíná“ i „končí“ „letní čas“ pro dané období dotazu, a jednoduše dodejte tento test uživateli $cond
za účelem určení, který "offset" použít:
db.collection.aggregate([
{ "$group": {
"_id": {
"$week": {
"$add": [
"$Timestamp",
{ "$cond": [
{ "$and": [
{ "$gte": [
{ "$dayOfyear": "$Timestamp" },
daylightSavingsStartDay
]},
{ "$lt": [
{ "$dayOfYear": "$Timestamp" },
daylightSavingsEndDay
]}
]},
daylightSavingsOffset,
normalOffset
]}
]
}
},
"min": { "$min": "$Timestamp" }
}}
])
Takže to můžete udělat trochu složitější, když budete pokrývat několik let, ale stále je to základní princip. Na jižní polokouli jste vždy pokrývající rok, takže každá podmínka by byla „rozsahem“ „začátek“ až „konec roku“ a „začátek roku“ až „konec“. Proto $or
s vnitřním $and
v rámci předvedeného "rozsahu".
Pokud chcete použít jiné hodnoty, zjistěte, kdy byste si „měli“ vybrat jednu z nich, a poté použijte $cond
.