Mongodb एक सरणी में वस्तुओं के आधार पर सभी मूल्यों को योग करने के लिए क्वेरी को अलग करें

Dec 11 2020

मेरे पास dataMongoDB में एक संग्रह है जो इस तरह दिखता है -

दस्तावेज़ 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 $अपने मूल्यों का योग।

यहाँ आपके संदर्भ के लिए मैंगो खेल का मैदान है ।