MongoDB एग्रीगेशन में $group चरण के अंदर कम्प्यूटेड एक्सप्रेशन को सरणी में डालने के लिए $push के साथ $cond (या अन्य एक्सप्रेशन) का उपयोग करें।
उदाहरण: स्टेटस फील्ड वाले दस्तावेज़
> db.demo24.insertOne({"Id":100,"Status":true});
{ "acknowledged" : true, "insertedId" : ObjectId("5e14c58722d07d3b95082e72") }
> db.demo24.insertOne({"Id":100,"Status":true});
{ "acknowledged" : true, "insertedId" : ObjectId("5e14c58a22d07d3b95082e73") }
> db.demo24.insertOne({"Id":100,"Status":false});
{ "acknowledged" : true, "insertedId" : ObjectId("5e14c58f22d07d3b95082e74") }
> db.demo24.insertOne({"Id":100,"Status":true});
{ "acknowledged" : true, "insertedId" : ObjectId("5e14c59122d07d3b95082e75") }
> db.demo24.insertOne({"Id":100,"Status":false});
{ "acknowledged" : true, "insertedId" : ObjectId("5e14c59222d07d3b95082e76") }
दस्तावेज़ देखना
> db.demo24.find();
आउटपुट: 5 दस्तावेज़ जिनमें Id=100 और मिश्रित true/false स्टेटस हैं।
एग्रीगेशन: कम्प्यूटेड मानों को सरणी में डालना
Id द्वारा समूहित करें और प्रत्येक दस्तावेज़ के लिए "Active"/"InActive" लेबल वाली सरणी बनाएं:
> db.demo24.aggregate({
$group: {
_id: '$Id',
AllValues: {
$push: {
$cond: [
{$eq: ['$Status', true]},
'Active',
'InActive'
]
}
}
}
})
परिणाम
{ "_id" : 100, "AllValues" : [ "Active", "Active", "InActive", "Active", "InActive" ] }
व्याख्या
$groupIdफील्ड द्वारा दस्तावेज़ों को समूहित करता है।$pushप्रत्येक दस्तावेज़ के लिए गणना किए गए मान को सरणी में संचित करता है।$condप्रत्येक दस्तावेज़ का मूल्यांकन करता है: यदिStatus == trueतो "Active" अन्यथा "InActive"।- परिणामी सरणी मूल दस्तावेज़ क्रम (समूह के भीतर) को बनाए रखती है।
वैकल्पिक: $addToSet का उपयोग करके अद्वितीय मान
यदि आपको केवल अद्वितीय कम्प्यूटेड मान चाहिए, तो $push को $addToSet से बदलें।