MongoDB में कस्टम फील्ड्स पर इंडेक्सिंग, सॉर्टिंग और पेजिनेशन को संयोजित करने के लिए, एक कंपाउंड इंडेक्स बनाएं जो सॉर्ट क्रम से मेल खाता हो, फिर sort(), skip(), limit() का उपयोग करें।
उदाहरण: नाम, आयु, देश वाले दस्तावेज़
> db.demo373.createIndex({"Name":1,"CountryName":1});
{ "createdCollectionAutomatically" : true, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }
> db.demo373.insertOne({"Name":"Chris","Age":22,"CountryName":"US"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e59ffde2ae06a1609a00aff") }
> db.demo373.insertOne({"Name":"David","Age":21,"CountryName":"AUS"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e59ffe82ae06a1609a00b00") }
> db.demo373.insertOne({"Name":"Bob","Age":23,"CountryName":"UK"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e59fff42ae06a1609a00b01") }
> db.demo373.insertOne({"Name":"John","Age":21,"CountryName":"US"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e59ffff2ae06a1609a00b02") }
> db.demo373.insertOne({"Name":"Carol","Age":23,"CountryName":"AUS"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e5a00082ae06a1609a00b03") }
दस्तावेज़ देखना
> db.demo373.find();
आउटपुट: पांच दस्तावेज़।
क्वेरी: Name, Age द्वारा सॉर्ट करें, पेज 2 (skip 2, limit 4)
> db.demo373.find().sort({"Name":1, "Age":1}).limit(4).skip(2);
आउटपुट:
{ "_id" : ObjectId("5e59ffde2ae06a1609a00aff"), "Name" : "Chris", "Age" : 22, "CountryName" : "US" }
{ "_id" : ObjectId("5e59ffe82ae06a1609a00b00"), "Name" : "David", "Age" : 21, "CountryName" : "AUS" }
{ "_id" : ObjectId("5e59ffff2ae06a1609a00b02"), "Name" : "John", "Age" : 21, "CountryName" : "US" }
मुख्य बिंदु
- कंपाउंड इंडेक्स:
{Name:1, CountryName:1}सॉर्ट{Name:1, Age:1}के लिए पूरी तरह से समर्थन नहीं करता क्योंकिAgeइंडेक्स में नहीं है। इष्टतम इंडेक्स:{Name:1, Age:1}या{Name:1, Age:1, CountryName:1}। - इंडेक्स क्रम मायने रखता है: इंडेक्स फील्ड क्रम सॉर्ट क्रम से मेल खाना चाहिए (या उल्टा)।
- पेजिनेशन:
skip()+limit()काम करता है लेकिन बड़ेskipके लिए धीमा होता है। गहरी पेजिनेशन के लिए रेंज-आधारित पेजिनेशन (कर्सर/सीक मेथड) पर विचार करें। - कवर क्वेरी: केवल इंडेक्स फील्ड्स प्रोजेक्ट करें ताकि दस्तावेज़ लुकअप से बचा जा सके।
सही इंडेक्स के साथ सुधारित उदाहरण
> db.demo373.createIndex({"Name":1, "Age":1});
> db.demo373.find({},{_id:0,Name:1,Age:1,CountryName:1}).sort({"Name":1,"Age":1}).limit(4).skip(2);
यह इंडेक्स-ओनली स्कैन (कवर्ड क्वेरी) का उपयोग करेगा।