Konsep dasar di sini adalah untuk membuat kueri Anda "sadar" kapan "penghematan siang hari" "dimulai" dan "berakhir" untuk periode kueri yang diberikan dan cukup berikan tes ini ke $cond
untuk menentukan "offset" mana yang akan digunakan:
db.collection.aggregate([
{ "$group": {
"_id": {
"$week": {
"$add": [
"$Timestamp",
{ "$cond": [
{ "$and": [
{ "$gte": [
{ "$dayOfyear": "$Timestamp" },
daylightSavingsStartDay
]},
{ "$lt": [
{ "$dayOfYear": "$Timestamp" },
daylightSavingsEndDay
]}
]},
daylightSavingsOffset,
normalOffset
]}
]
}
},
"min": { "$min": "$Timestamp" }
}}
])
Jadi Anda dapat membuatnya sedikit lebih rumit ketika mencakup beberapa tahun, tetapi itu masih merupakan prinsip dasarnya. Di belahan bumi selatan Anda selalu mencakup satu tahun sehingga setiap kondisi akan menjadi "rentang" dari "awal" hingga "akhir tahun" dan "awal tahun" hingga "akhir". Oleh karena itu $or
dengan $and
inner bagian dalam dalam "rentang" yang ditunjukkan operator.
Jika Anda memiliki nilai yang berbeda untuk diterapkan, maka deteksi kapan Anda "harus" memilih salah satu dan kemudian terapkan menggunakan $cond
.