MongoDB को इंडेक्स के बजाय पूर्ण संग्रह स्कैन (BasicCursor) का उपयोग करने के लिए बाध्य करने के लिए, hint({ $natural: 1 }) का उपयोग करें। यह प्रदर्शन परीक्षण या इंडेक्स व्यवहार डीबग करने के लिए उपयोगी है।
उदाहरण: इंडेक्स के साथ संग्रह
> db.demo31.createIndex({"StudentFirstName":1});
{ "createdCollectionAutomatically" : true, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }
> db.demo31.insertOne({"StudentFirstName":"John"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e174f8fcfb11e5c34d898c1") }
> db.demo31.insertOne({"StudentFirstName":"Jace"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e174f97cfb11e5c34d898c2") }
> db.demo31.insertOne({"StudentFirstName":"Chris"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e174f9ccfb11e5c34d898c3") }
> db.demo31.insertOne({"StudentFirstName":"James"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e174fa0cfb11e5c34d898c4") }
दस्तावेज़ देखना
> db.demo31.find();
आउटपुट: चार दस्तावेज़।
BasicCursor बाध्य करें (नेचुरल क्रम)
> db.demo31.find({"StudentFirstName": {$regex: '^Ja'}}).hint({ $natural: 1 });
आउटपुट:
{ "_id" : ObjectId("5e174f97cfb11e5c34d898c2"), "StudentFirstName" : "Jace" }
{ "_id" : ObjectId("5e174fa0cfb11e5c34d898c4"), "StudentFirstName" : "James" }
व्याख्या
hint({ $natural: 1 })ऑप्टिमाइज़र को इंडेक्स को अनदेखा करने और डिस्क पर भौतिक क्रम में दस्तावेज़ स्कैन करने के लिए कहता है।$natural: 1आगे का संग्रह स्कैन;-1पीछे का स्कैन।- बिना हिंट के,
StudentFirstNameपर इंडेक्स का उपयोग रेगुलर एक्सप्रेशन प्रीफिक्स मिलान (^Ja) के लिए किया जाएगा।
कब उपयोग करें
- इंडेक्स बनाम कलेक्शन स्कैन प्रदर्शन की तुलना करना।
- इंडेक्स भ्रष्टाचार या प्लान चयन बग डीबग करना।
- छोटे संग्रह जहां कलेक्शन स्कैन तेज है।
चेतावनी
उत्पादन क्वेरी में hint का उपयोग करने से बचें जब तक आवश्यक न हो; ऑप्टिमाइज़र को चुनने दें। स्थायी हिंट के लिए, इंडेक्स स्पेसिफिकेशन के साथ hint() का उपयोग करें।