Penting untuk dipahami bahwa operasi dalam argumen ke agregat() membentuk pipa . Ini berarti bahwa input ke setiap elemen pipeline adalah aliran dokumen yang dihasilkan oleh elemen sebelumnya dalam pipeline.
Dalam contoh Anda, kueri pertama Anda membuat alur dokumen yang terlihat seperti ini:
{
"_id" : 2,
"avg_score" : 5.5
},
{
"_id" : 1,
"avg_score" : 4
}
Ini berarti bahwa elemen kedua dari pipline melihat serangkaian dokumen di mana satu-satunya kunci adalah "_id" dan "avg_score". Kunci "category_id" dan "skor" tidak ada lagi dalam aliran dokumen ini.
Jika Anda ingin mengagregasi lebih lanjut pada aliran ini, Anda harus mengagregasi menggunakan kunci yang terlihat pada tahap ini dalam alur. Karena Anda ingin membuat rata-rata rata-rata, Anda perlu memasukkan satu nilai konstanta untuk bidang _id, sehingga semua dokumen masukan dikelompokkan menjadi satu hasil.
Kode berikut menghasilkan hasil yang benar:
db.questions.aggregate(
{ $group : {
_id : "$category_id",
avg_score : { $avg : "$score" },
}
},
{ $group : {
_id : "all",
avg_score : { $avg : "$avg_score" },
}
}
);
Saat dijalankan, ini menghasilkan output berikut:
{
"result" : [
{
"_id" : "all",
"avg_score" : 4.75
}
],
"ok" : 1
}