Meskipun bisa dilakukan, membuat kode lebih mudah dibaca dan lebih kompleks.
Saya akan menulis ulang $group
tahap untuk memasukkan year
bersama dengan weeks
dan tambahkan $project
tahap untuk memformat data sesuai kebutuhan.
db.collection.aggregate([
{
"$group": {
"_id": {
"week": {
"$week": {"$subtract": ["$at", 25200000]} // <-- Changes timezone to -07:00
},
"year": {
"$year": {"$subtract": ["$at", 25200000]} // <-- Changes timezone to -07:00
},
},
// <-- Add keys to be added in group along with its logics
"averageValue": {
"$avg": "$readings.level_1"
}
},
},
{
"$project": {
"_id": {
"startDate": {
"$dateToString": {
"date": {
"$dateFromParts": {
"isoWeekYear": "$_id.year",
"isoWeek": "$_id.week"
}
},
"format": "%Y-%m-%d",
},
},
"endDate": {
"$dateToString": {
"date": {
"$add": [
{
"$dateFromParts": {
"isoWeekYear": "$_id.year",
"isoWeek": "$_id.week"
}
},
518400000,
],
},
"format": "%Y-%m-%d",
},
},
},
// <-- Add remaining keys to be projected
"averageValue": 1,
},
},
])
Beri tahu saya jika Anda memerlukan penjelasan tentang setiap tahapan dan operator yang digunakan serta alasan saya menggunakannya.
Eksekusi Contoh Mongo Playground