Основната концепция тук е заявката ви да бъде „наясно“ кога „лятното часово време“ едновременно „започва“ и „завършва“ за дадения период на заявка и просто да предоставите този тест на $cond
за да определите кое "отместване" да използвате:
db.collection.aggregate([
{ "$group": {
"_id": {
"$week": {
"$add": [
"$Timestamp",
{ "$cond": [
{ "$and": [
{ "$gte": [
{ "$dayOfyear": "$Timestamp" },
daylightSavingsStartDay
]},
{ "$lt": [
{ "$dayOfYear": "$Timestamp" },
daylightSavingsEndDay
]}
]},
daylightSavingsOffset,
normalOffset
]}
]
}
},
"min": { "$min": "$Timestamp" }
}}
])
Така че можете да направите това малко по-сложно, когато обхващате няколко години, но това все още е основният принцип. В в южното полукълбо вие стевинаги обхващаща година, така че всяко условие ще бъде "диапазон" от "начало" до "края на годината" и "начало на годината" до "край". Следователно $or
с вътрешен $and
в рамките на показаните оператори "диапазон".
Ако имате различни стойности за прилагане, открийте кога „трябва“ да изберете една от двете и след това приложете с помощта на $cond
.