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.