Kueri Agregat Mongodb untuk menjumlahkan semua nilai berdasarkan bidang di dalam objek dalam Array
Dec 11 2020
Saya memiliki koleksi data
di MongoDB yang terlihat seperti ini -
dokumen 1-
{
metadata:[
{
"title": "High",
"val": 12
},
{
"title": "Medium",
"val": 15
},
{
"title": "Low",
"val": 2
}
]
}
dokumen2 -
{
metadata:[
{
"title": "High",
"val": 10
},
{
"title": "Medium",
"val": 12
},
{
"title": "Low",
"val": 20
}
]
}
& seterusnya ..
Saya ingin menggabungkan val
bidang berdasarkan title
nilainya. Outputnya akan terlihat seperti -
{
"High": 22,
"Medium": 27,
"Low": 22
}
Bagaimana saya mencapai ini? Terima kasih sebelumnya.
Jawaban
2 turivishal Dec 11 2020 at 12:51
$unwind
mendekonstruksimetadata
array$grpup
olehtitle
dan membuat jumlahval
$group
dengan null, ubah array menjadi objek dari kunci dan nilai dengan$arrayToObject
, dan gabungkan objek menggunakan$mergeObjects
db.collection.aggregate([
{ $unwind: "$metadata" }, { $group: {
_id: "$metadata.title", sum: { $sum: "$metadata.val" } } }, { $group: {
_id: null,
metadata: {
$mergeObjects: { $arrayToObject: [
[{ k: "$_id", v: "$sum" }]
]
}
}
}
}
])
Tempat bermain
1 ray Dec 11 2020 at 12:31
Pertama Anda dapat $ melepas metadata
larik. Kemudian gunakan $ group dan$cond to $jumlahkan nilai-nilai Anda.
Ini taman bermain mongo untuk referensi Anda.
Kiat Pemilik Anjing yang Bermanfaat: Mengapa Penting untuk Membiarkan Anjing Anda Mengendus di Jalan
Taylor Sheridan Baru Menambahkan 1 Bintang 'Yellowstone' Favoritnya ke Pemeran 'Lawmen: Bass Reeves'