Beberapa ide:
Anda tidak memerlukan $project
pertama tahap dalam kueri. Dan, Anda dapat menyertakan { "$toDate": "$originaltimestamp" }
dalam $group
_id
panggung , seperti di bawah ini:
"_id": {
"$dateToString": {
"format": "%Y-%m-%d", "date": { "$toDate": "$originaltimestamp" }
}
}
Tentang $push: "$$ROOT"
- alih-alih $$ROOT
, ambil hanya bidang yang paling Anda butuhkan (atau penting). Hal ini untuk mengurangi penggunaan memori. Misalnya:
"data": {
$push: {
"subscriber_id": "$subscriber_id",
"type": "$type",
// other required fields...
}
}
Terakhir, Anda dapat mempertimbangkan untuk membatasi kueri untuk sekumpulan tanggal pada suatu waktu. Ini akan membutuhkan menjalankan kueri lebih dari sekali untuk rentang tanggal yang berbeda - tetapi saya pikir itu mungkin lebih baik secara keseluruhan. Misalnya, setiap bulan cocok dengan month
bidang. Dan, month
. ini dapat diindeks untuk kinerja. Ini harus menyertakan $match
tahap di awal (tahap pertama) query, misalnya:
{ $match: { month: "202001" } }
Dan, ini akan meminta data untuk bulan Januari 2020.