एग्रीगेशन: $unwind, $group, $sort से ऐरे एलिमेंट्स के सशर्त योग द्वारा सॉर्ट करें
जब डॉक्यूमेंट्स में ऐरे ऑफ़ ऑब्जेक्ट्स हो और आप किसी शर्त के आधार पर ऐरे एलिमेंट्स के योग की गणना करके डॉक्यूमेंट्स को सॉर्ट करना चाहें, तो एग्रीगेशन पाइपलाइन का उपयोग करें।
उदाहरण: संग्रह बनाना
> db.demo189.insertOne({
"_id": 100,
"List": [{"Value": 10}, {"Value": 20}, {"Value": 10}]
});
{ "acknowledged": true, "insertedId": 100 }
> db.demo189.insertOne({
"_id": 101,
"List": [{"Value": 10}, {"Value": 10}, {"Value": 10}]
});
{ "acknowledged": true, "insertedId": 101 }
सभी डॉक्यूमेंट्स देखना
> db.demo189.find();
{ "_id": 100, "List": [{"Value": 10}, {"Value": 20}, {"Value": 10}] }
{ "_id": 101, "List": [{"Value": 10}, {"Value": 10}, {"Value": 10}] }
सशर्त योग द्वारा सॉर्ट करने की एग्रीगेशन क्वेरी
List.Value == 10 वाले एलिमेंट्स की गिनती (प्रत्येक के लिए 1) का योग निकालें और अवरोही क्रम में सॉर्ट करें:
> db.demo189.aggregate([
{ "$unwind": "$List" },
{
"$group": {
"_id": "$_id",
"total": {
"$sum": {
"$cond": {
"if": { "$eq": ["$List.Value", 10] },
"then": 1,
"else": 0
}
}
},
"List": { "$push": { "Value": "$List.Value" } }
}
},
{ "$sort": { "total": -1 } },
{ "$project": { "List": 1 } }
])
आउटपुट:
{ "_id": 101, "List": [{"Value": 10}, {"Value": 10}, {"Value": 10}] }
{ "_id": 100, "List": [{"Value": 10}, {"Value": 20}, {"Value": 10}] }
डॉक्यूमेंट 101 में तीनों एलिमेंट्स 10 हैं (total=3), डॉक्यूमेंट 100 में दो एलिमेंट्स 10 हैं (total=2), इसलिए 101 पहले आया।