MongoDB में ऐरे के ऑब्जेक्ट्स की प्रॉपर्टीज का योग
इसके लिए MongoDB में aggregate() का उपयोग करें।
कलेक्शन बनाना
> db.demo131.insertOne(
{
"_id": 101,
"Details": [
{ "PlayerScore": 500, "PlayerName": "Chris" },
{ "PlayerScore": 400, "PlayerName": "David" }
]
}
);
{ "acknowledged": true, "insertedId": 101 }
> db.demo131.insertOne(
{
"_id": 102,
"Details": [
{ "PlayerScore": 600, "PlayerName": "Chris" },
{ "PlayerScore": 200, "PlayerName": "David" }
]
}
);
{ "acknowledged": true, "insertedId": 102 }
सभी डॉक्यूमेंट्स
> db.demo131.find();
{ "_id": 101, "Details": [ { "PlayerScore": 500, "PlayerName": "Chris" }, { "PlayerScore": 400, "PlayerName": "David" } ] }
{ "_id": 102, "Details": [ { "PlayerScore": 600, "PlayerName": "Chris" }, { "PlayerScore": 200, "PlayerName": "David" } ] }
एग्रीगेशन क्वेरी
> db.demo131.aggregate([
{ $unwind: "$Details" },
{
$group: {
_id: "$Details.PlayerName",
Value: { $sum: "$Details.PlayerScore" }
}
},
{
$group: {
_id: 0,
Details: { $push: { Details: "$_id", Value: "$Value" } }
}
},
{
$project: { Details: 1, _id: 0 }
}
])
परिणाम
{ "Details": [ { "Details": "David", "Value": 600 }, { "Details": "Chris", "Value": 1100 } ] }
चरण-दर-चरण व्याख्या
- $unwind: Details ऐरे को अलग-अलग डॉक्यूमेंट्स में विभाजित करता है
- पहला $group: PlayerName के अनुसार ग्रुप करता है और PlayerScore का योग करता है
- Chris: 500 + 600 = 1100
- David: 400 + 200 = 600
- दूसरा $group: सभी परिणामों को एक Details ऐरे में संयोजित करता है
- $project: केवल Details ऐरे आउटपुट करता है, _id छुपाता है
यह पैटर्न नेस्टेड ऐरे डेटा में विभिन्न डॉक्यूमेंट्स में मानों को जोड़ने के लिए उपयोगी है।