Mongodb एक सरणी में वस्तुओं के आधार पर सभी मूल्यों को योग करने के लिए क्वेरी को अलग करें
Dec 11 2020
मेरे पास data
MongoDB में एक संग्रह है जो इस तरह दिखता है -
दस्तावेज़ 1-
{
metadata:[
{
"title": "High",
"val": 12
},
{
"title": "Medium",
"val": 15
},
{
"title": "Low",
"val": 2
}
]
}
दस्तावेज २ -
{
metadata:[
{
"title": "High",
"val": 10
},
{
"title": "Medium",
"val": 12
},
{
"title": "Low",
"val": 20
}
]
}
& जल्द ही..
मैं मूल्य के val
आधार पर क्षेत्र को एकत्र करना चाहता हूं title
। आउटपुट जैसा दिखना चाहिए -
{
"High": 22,
"Medium": 27,
"Low": 22
}
मुझे यह कैसे हासिल होगा? अग्रिम में धन्यवाद।
जवाब
2 turivishal Dec 11 2020 at 12:51
$unwind
डिकंस्ट्रक्टmetadata
ऐरे$grpup
द्वाराtitle
और बनाने का योगval
$group
नल द्वारा, सरणी को कुंजी और मान से ऑब्जेक्ट में कनवर्ट करें$arrayToObject
, और ऑब्जेक्ट का उपयोग करके मर्ज करें$mergeObjects
db.collection.aggregate([
{ $unwind: "$metadata" }, { $group: {
_id: "$metadata.title", sum: { $sum: "$metadata.val" } } }, { $group: {
_id: null,
metadata: {
$mergeObjects: { $arrayToObject: [
[{ k: "$_id", v: "$sum" }]
]
}
}
}
}
])
खेल का मैदान
1 ray Dec 11 2020 at 12:31
आप पहले metadata
सरणी को खोल सकते हैं। तब $ समूह और का उपयोग करें$cond to $अपने मूल्यों का योग।
यहाँ आपके संदर्भ के लिए मैंगो खेल का मैदान है ।