MongoDB एग्रीगेशन में $match, $unwind, $group, $sum का उपयोग करके सशर्त योग
नेस्टेड ऐरे में विशिष्ट शर्तों को पूरा करने वाले दस्तावेज़ों के फ़ील्ड का योग निकालने के लिए एग्रीगेशन पाइपलाइन का उपयोग करें।
सैंपल डेटा बनाना
> db.calculateSumOfDocument.insertOne({
"ListOfUsers": ["Carol", "Bob"],
"UsersDetails": [
{ "FirstUser": "Carol", "TotalLikes": 20 },
{ "FirstUser": "Bob", "TotalLikes": 45 }
]
});
> db.calculateSumOfDocument.insertOne({
"ListOfUsers": ["Carol", "Bob"],
"UsersDetails": [
{ "FirstUser": "Carol", "TotalLikes": 60 },
{ "FirstUser": "Bob", "TotalLikes": 50 }
]
});
दस्तावेज़ देखना
> db.calculateSumOfDocument.find().pretty();
आउटपुट:
एग्रीगेशन: Carol के TotalLikes का योग
> db.calculateSumOfDocument.aggregate([ { "$match": { "UsersDetails.FirstUser": "Carol" } }, // 1. दस्तावेज़ फ़िल्टर करें { "$unwind": "$UsersDetails" }, // 2. ऐरे फ्लैट करें { "$match": { "UsersDetails.FirstUser": "Carol" } }, // 3. फिर से फ़िल्टर करें (unwind के बाद) { "$group": { "_id": null, "total": { "$sum": "$UsersDetails.TotalLikes" } }} ]);आउटपुट:
चरण-दर-चरण स्पष्टीकरण
- पहला $match: केवल वे दस्तावेज़ जिनमें Carol का रिकॉर्ड हो (प्रदर्शन के लिए जल्दी फ़िल्टर)
- $unwind: UsersDetails ऐरे को डी-कंस्ट्रक्ट करता है
- दूसरा $match: केवल Carol के एलिमेंट्स रखता है
- $group: सभी Carol के TotalLikes का योग करता है (20 + 60 = 80)
अनुकूलित संस्करण (MongoDB 3.6+)
सिंगल पाइपलाइन में एकाधिक यूज़र्स का योग
आउटपुट: प्रत्येक यूज़र के लिए कुल लाइक्स