MongoDB में skip() और limit() का उपयोग करके पेजिनेशन
skip() विधि परिणाम सेट से पहले n दस्तावेज़ों को छोड़ देती है। limit() के साथ संयोजित करके पेजिनेशन लागू किया जा सकता है।
सैंपल डेटा बनाना
> db.demo246.insertOne({"StudentFirstName":"Chris","StudentLastName":"Brown"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e46b0d71627c0c63e7dba65") }
> db.demo246.insertOne({"StudentFirstName":"John","StudentLastName":"Doe"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e46b0e21627c0c63e7dba66") }
> db.demo246.insertOne({"StudentFirstName":"John","StudentLastName":"Smith"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e46b0ea1627c0c63e7dba67") }
> db.demo246.insertOne({"StudentFirstName":"Carol","StudentLastName":"Taylor"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e46b0f91627c0c63e7dba68") }
सभी दस्तावेज़ देखना
> db.demo246.find();
आउटपुट:
पहले 2 दस्तावेज़ छोड़कर 1 दस्तावेज़ लेना
> db.demo246.find().skip(2).limit(1);आउटपुट (तीसरा दस्तावेज़):
पेजिनेशन पैटर्न
// पेज 1 (पहले 10) db.collection.find().skip(0).limit(10) // पेज 2 (अगले 10) db.collection.find().skip(10).limit(10) // पेज n db.collection.find().skip((n-1)*pageSize).limit(pageSize)प्रदर्शन चेतावनी
skip()बड़े ऑफसेट्स के लिए धीमा होता है (छोड़े गए दस्तावेज़ों को स्कैन करना पड़ता है)- बड़े डेटासेट के लिए कर्सर-आधारित पेजिनेशन (रेंज क्वेरी) बेहतर है
बेहतर पेजिनेशन: रेंज क्वेरी (सीक मेथड)
// अंतिम देखे गए _id का उपयोग करके
db.collection.find({ _id: { $gt: lastSeenId } }).limit(10)
एग्रीगेशन में $skip और $limit
> db.demo246.aggregate([
{ $sort: { StudentFirstName: 1 } },
{ $skip: 2 },
{ $limit: 1 }
]);