Kueri yang Anda gambarkan mengelompokkan serangkaian dokumen menurut hari, ketika dokumen tersebut berisi tanggal waktu UTC.
MongoDB secara internal menyimpan tanggal/waktu sebagai jumlah milidetik sejak 1 Jan 1970, jadi langkah pertama perlu menghitung awal hari untuk setiap dokumen, kemudian mengelompokkan berdasarkan nilai awal hari tersebut.
Jika Anda menggunakan MongoDB 5.0, Anda dapat menggunakan $dateTrunc operator:
{$dateTrunc:{date:"$createdAt",unit:"day",timezone:"America/New_York"}}
Untuk versi yang lebih lama, Anda dapat menghitung objek tanggal yang mewakili awal hari atau membuat string yang hanya berisi tanggal.
Untuk opsi string:
{$concat: [
{$toString:{$year:{ date:"$createdAt", timezone:"America/New_York" }}},
"-",
{$toString:{$month:{ date:"$createdAt", timezone:"America/New_York" }}},
"-",
{$toString:{$dayOfMonth:{ date:"$createdAt", timezone:"America/New_York" }}},
]}
Jadi secara keseluruhan alur agregasi adalah:
- $match untuk memilih dokumen dalam jangka waktu yang diinginkan
- $project untuk menghitung awal hari untuk setiap dokumen
- $group pada awal hari, menghitung jumlah kemunculan
- tahapan selanjutnya untuk mengkonversi dokumen ke format yang diinginkan