Det grundlæggende koncept her er at gøre din forespørgsel "bevidst" om, hvornår "sommertid" både "starter" og "slutter" for den givne forespørgselsperiode og blot levere denne test til $cond
for at bestemme hvilken "offset" der skal bruges:
db.collection.aggregate([
{ "$group": {
"_id": {
"$week": {
"$add": [
"$Timestamp",
{ "$cond": [
{ "$and": [
{ "$gte": [
{ "$dayOfyear": "$Timestamp" },
daylightSavingsStartDay
]},
{ "$lt": [
{ "$dayOfYear": "$Timestamp" },
daylightSavingsEndDay
]}
]},
daylightSavingsOffset,
normalOffset
]}
]
}
},
"min": { "$min": "$Timestamp" }
}}
])
Så du kan gøre det lidt mere komplekst, når du dækker flere år, men det er stadig grundprincippet. På den sydlige halvkugle er du altid strækker sig over et år, så hver betingelse ville være et "interval" af "start" til "slutning af året" og "begyndelse af året" til "slut". Derfor en $or
med en indre $and
inden for det viste "område"-operatorer.
Hvis du har forskellige værdier at anvende, så find ud af, hvornår du "bør" vælge enten, og anvend derefter ved hjælp af $cond
.