एग्रीगेशन फ्रेमवर्क के साथ शीर्ष N परिणाम
MongoDB में "शीर्ष N" पंक्तियों को प्राप्त करने के लिए (उदाहरण के लिए, उच्चतम स्कोर वाले शीर्ष 5 छात्र), एग्रीगेशन पाइपलाइन का उपयोग करें जिसमें $sort, $limit, और वैकल्पिक रूप से $match चरण शामिल हों।
उदाहरण: डेटा डालना
> db.topNRowsDemo.insertOne({"StudentName":"Larry","Score":78});
{ "acknowledged" : true, "insertedId" : ObjectId("5ca26eee6304881c5ce84b91") }
> db.topNRowsDemo.insertOne({"StudentName":"Chris","Score":45});
{ "acknowledged" : true, "insertedId" : ObjectId("5ca26ef66304881c5ce84b92") }
> db.topNRowsDemo.insertOne({"StudentName":"Mike","Score":65});
{ "acknowledged" : true, "insertedId" : ObjectId("5ca26efe6304881c5ce84b93") }
> db.topNRowsDemo.insertOne({"StudentName":"Adam","Score":55});
{ "acknowledged" : true, "insertedId" : ObjectId("5ca26f066304881c5ce84b94") }
> db.topNRowsDemo.insertOne({"StudentName":"John","Score":86});
{ "acknowledged" : true, "insertedId" : ObjectId("5ca26f0f6304881c5ce84b95") }
सभी दस्तावेज़ देखना
> db.topNRowsDemo.find().pretty();
आउटपुट:
{ "_id" : ObjectId("5ca26eee6304881c5ce84b91"), "StudentName" : "Larry", "Score" : 78 }
{ "_id" : ObjectId("5ca26ef66304881c5ce84b92"), "StudentName" : "Chris", "Score" : 45 }
{ "_id" : ObjectId("5ca26efe6304881c5ce84b93"), "StudentName" : "Mike", "Score" : 65 }
{ "_id" : ObjectId("5ca26f066304881c5ce84b94"), "StudentName" : "Adam", "Score" : 55 }
{ "_id" : ObjectId("5ca26f0f6304881c5ce84b95"), "StudentName" : "John", "Score" : 86 }
शीर्ष N क्वेरी (उदाहरण: Score > 65 वाले शीर्ष 5, नाम के अनुसार क्रमबद्ध)
> db.topNRowsDemo.aggregate([
... {$sort: {StudentName: 1}},
... {$limit: 5},
... {$match: {Score: {$gt: 65}}}
... ]).pretty();
आउटपुट:
{ "_id" : ObjectId("5ca26f0f6304881c5ce84b95"), "StudentName" : "John", "Score" : 86 }
{ "_id" : ObjectId("5ca26eee6304881c5ce84b91"), "StudentName" : "Larry", "Score" : 78 }
सही क्रम: आमतौर पर, पहले $match (फ़िल्टर), फिर $sort (क्रमबद्ध), फिर $limit (सीमा) लागू करना प्रदर्शन के लिए बेहतर होता है। उपरोक्त उदाहरण में क्रम अलग है, इसलिए परिणाम अपेक्षा से भिन्न हो सकते हैं। मानक पैटर्न:
db.collection.aggregate([
{ $match: { Score: { $gt: 65 } } },
{ $sort: { Score: -1 } }, // उच्चतम स्कोर पहले
{ $limit: 5 }
])