MongoDB में कलेक्शन से प्रति ग्रुप अधिकतम एट्रिब्यूट वाले डॉक्यूमेंट प्राप्त करने के लिए $sort ऑपरेटर के साथ $group स्टेटमेंट का उपयोग करें।
उदाहरण से समझें
एक कलेक्शन बनाकर डॉक्यूमेंट इन्सर्ट करते हैं:
> db.maxAttributePerGroup.insertOne({"StudentFirstName": "John", "StudentLastName": "Smith", "StudentAge": 29, "StudentId": 10});
> db.maxAttributePerGroup.insertOne({"StudentFirstName": "Carol", "StudentLastName": "Taylor", "StudentAge": 19, "StudentId": 10});
> db.maxAttributePerGroup.insertOne({"StudentFirstName": "Adam", "StudentLastName": "Smith", "StudentAge": 34, "StudentId": 20});
> db.maxAttributePerGroup.insertOne({"StudentFirstName": "Bob", "StudentLastName": "Taylor", "StudentAge": 58, "StudentId": 20});
सभी डॉक्यूमेंट देखने के लिए:
> db.maxAttributePerGroup.find().pretty();
आउटपुट:
{ "_id": ..., "StudentFirstName": "John", "StudentLastName": "Smith", "StudentAge": 29, "StudentId": 10 }
{ "_id": ..., "StudentFirstName": "Carol", "StudentLastName": "Taylor", "StudentAge": 19, "StudentId": 10 }
{ "_id": ..., "StudentFirstName": "Adam", "StudentLastName": "Smith", "StudentAge": 34, "StudentId": 20 }
{ "_id": ..., "StudentFirstName": "Bob", "StudentLastName": "Taylor", "StudentAge": 58, "StudentId": 20 }
अब प्रति StudentId ग्रुप में अधिकतम StudentAge वाले डॉक्यूमेंट प्राप्त करने के लिए:
> db.maxAttributePerGroup.aggregate([
{$sort: {"StudentId": 1, "StudentAge": -1}},
{$group: {
"_id": "$StudentId",
"StudentAge": {$first: "$StudentAge"},
"StudentFirstName": {$first: "$StudentFirstName"},
"StudentLastName": {$first: "$StudentLastName"}
}}
]).pretty();
आउटपुट:
{ "_id": 20, "StudentAge": 58, "StudentFirstName": "Bob", "StudentLastName": "Taylor" }
{ "_id": 10, "StudentAge": 29, "StudentFirstName": "John", "StudentLastName": "Smith" }
$sort में StudentAge: -1 से पहले सबसे बड़ी उम्र आती है, फिर $group में $first से वही रिकॉर्ड चुना जाता है।