MongoDB एग्रीगेशन से सब-डॉक्यूमेंट के फील्ड्स का योग करना
MongoDB में एम्बेडेड डॉक्यूमेंट्स की ऐरे में किसी फील्ड के सभी वैल्यूज का योग करने के लिए एग्रीगेशन पाइपलाइन में $unwind और $group का उपयोग करें।
उदाहरण: सब-डॉक्यूमेंट्स ऐरे वाला डॉक्यूमेंट बनाना
> db.sumEveryFieldDemo.insertOne(
... {
... "_id":101,
... "PlayerDetails": [
... {"PlayerName":"John","PlayerScore":1000},
... {"PlayerName":"Carol","PlayerScore":2000},
... {"PlayerName":"Sam","PlayerScore":3000}
... ]
... }
... );
{ "acknowledged" : true, "insertedId" : 101 }
डॉक्यूमेंट देखना
> db.sumEveryFieldDemo.find().pretty();
आउटपुट:
{ "_id" : 101, "PlayerDetails" : [ { "PlayerName" : "John", "PlayerScore" : 1000 }, { "PlayerName" : "Carol", "PlayerScore" : 2000 }, { "PlayerName" : "Sam", "PlayerScore" : 3000 } ] }
सभी PlayerScore का योग करना
> db.sumEveryFieldDemo.aggregate([
... { $unwind: "$PlayerDetails" },
... { $group: {
... _id: '$_id',
... sum: { $sum: '$PlayerDetails.PlayerScore' }
... }}
... ]).pretty();
आउटपुट:
{ "_id" : 101, "sum" : 6000 }
पाइपलाइन समझ:
$unwind: "$PlayerDetails"- ऐरे के प्रत्येक एलिमेंट के लिए अलग डॉक्यूमेंट बनाता है$group- _id द्वारा ग्रुप करके$sumसे PlayerScore जोड़ता है
वेरिएशन्स:
- मल्टीपल फील्ड्स का योग:
{ sum1: {$sum: "$field1"}, sum2: {$sum: "$field2"} } - शर्त के साथ योग:
{ $sum: { $cond: [{ $gt: ["$score", 100] }, "$score", 0] } } - MongoDB 3.2+ में
$projectमें$sumसीधे ऐरे पर उपयोग कर सकते हैं