Ini tidak berfungsi dengan benar karena menggabungkan semua dokumen dalam koleksi; Anda mengelompokkan pada "_id": "tempId"
, Anda hanya perlu mereferensikan kunci yang benar dengan menambahkan $
sebagai:
db.getCollection('myCollection').aggregate([
{ "$group": {
"_id": "$tempId",
"totalValue": {
"$sum": { "$sum": "$messages.data.value" }
}
} }
])
yang pada dasarnya adalah versi pipa satu tahap dari operasi agregat dengan bidang tambahan yang menampung ekspresi jumlah sebelum pipa grup kemudian memanggil bidang itu sebagai $sum
operator dalam grup.
Di atas berfungsi sejak $sum
dari MongoDB 3.2+ tersedia di $project
dan $group
tahapan dan saat digunakan dalam $project
tahap, $sum
mengembalikan jumlah daftar ekspresi. Ekspresi "$messages.data.value"
mengembalikan daftar angka [120, 1200]
yang kemudian digunakan sebagai $sum
ekspresi:
db.getCollection('myCollection').aggregate([
{ "$project": {
"values": { "$sum": "$messages.data.value" },
"tempId": 1,
} },
{ "$group": {
"_id": "$tempId",
"totalValue": { "$sum": "$values" }
} }
])