Het basisconcept hier is om uw zoekopdracht "bewust" te maken van wanneer "zomertijd" zowel "begint" als "eindigt" voor de opgegeven zoekperiode en deze test eenvoudigweg aan $cond
om te bepalen welke "offset" moet worden gebruikt:
db.collection.aggregate([
{ "$group": {
"_id": {
"$week": {
"$add": [
"$Timestamp",
{ "$cond": [
{ "$and": [
{ "$gte": [
{ "$dayOfyear": "$Timestamp" },
daylightSavingsStartDay
]},
{ "$lt": [
{ "$dayOfYear": "$Timestamp" },
daylightSavingsEndDay
]}
]},
daylightSavingsOffset,
normalOffset
]}
]
}
},
"min": { "$min": "$Timestamp" }
}}
])
Dus je kunt dat iets ingewikkelder maken als je meerdere jaren dekt, maar het blijft het basisprincipe. Op het zuidelijk halfrond ben je altijd die een jaar overspant, dus elke voorwaarde zou een "bereik" zijn van "begin" tot "einde van het jaar" en van "begin van het jaar" tot "einde". Daarom een $or
met een innerlijke $and
binnen het "bereik" dat door de operators is gedemonstreerd.
Als je verschillende waarden hebt om toe te passen, detecteer dan wanneer je een van beide "moet" kiezen en pas het dan toe met $cond
.