MongoDB ने db.collection.hideIndex()
पेश किया मोंगोडीबी 4.4 में विधि।
यह विधि क्वेरी प्लानर से मौजूदा इंडेक्स को छुपाती है। यह आपको वास्तव में इंडेक्स को गिराए बिना किसी इंडेक्स को छोड़ने के संभावित प्रभाव का मूल्यांकन करने की अनुमति देता है।
यदि इसे छुपाने से नकारात्मक प्रभाव पड़ता है, तो आप db.collection.unhideIndex()
का उपयोग कर सकते हैं सूचकांक को उजागर करने के लिए। यह आपको अनुक्रमणिका को छोड़ने, फिर इसे फिर से बनाने से बचाता है।
उदाहरण
मान लीजिए हमारे पास pets
. नामक संग्रह है . आइए उस संग्रह पर वर्तमान अनुक्रमणिका लौटाएं।
db.pets.getIndexes()
परिणाम:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "name" : 1, "type" : -1 }, "name" : "idx_name_1_type_-1" }, { "v" : 2, "key" : { "weight" : -1 }, "name" : "idx_weight_-1" } ]
हम देख सकते हैं कि इसमें तीन इंडेक्स हैं। आइए तीसरा नाम चुनें idx_weight_-1
हमारे उदाहरण के लिए।
सबसे पहले, आइए देखें कि जब हम उस अनुक्रमणिका का उपयोग करने वाली क्वेरी चलाते हैं तो क्वेरी योजना कैसी दिखती है।
db.pets.find( { weight: { $gt: 10 } } ).explain()
यहां, हम ऐसे पालतू जानवरों की तलाश कर रहे हैं जिनका वजन एक निश्चित वजन से अधिक है। हम explain()
. का इस्तेमाल कर रहे हैं वास्तविक परिणामों के बजाय क्वेरी योजना प्रदर्शित करने की विधि।
इस क्वेरी के लिए क्वेरी प्लान कैसा दिखता है:
{ "queryPlanner" : { "plannerVersion" : 1, "namespace" : "PetHouse.pets", "indexFilterSet" : false, "parsedQuery" : { "weight" : { "$gt" : 10 } }, "queryHash" : "CEB852E7", "planCacheKey" : "851FBDB5", "winningPlan" : { "stage" : "FETCH", "inputStage" : { "stage" : "IXSCAN", "keyPattern" : { "weight" : -1 }, "indexName" : "idx_weight_-1", "isMultiKey" : false, "multiKeyPaths" : { "weight" : [ ] }, "isUnique" : false, "isSparse" : false, "isPartial" : false, "indexVersion" : 2, "direction" : "forward", "indexBounds" : { "weight" : [ "[inf.0, 10.0)" ] } } }, "rejectedPlans" : [ ] }, "ok" : 1 }
हम देख सकते हैं कि यह IXSCAN
. का उपयोग करता है जिसका अर्थ है कि यह index.
अब इंडेक्स को छुपाते हैं।
सूचकांक छुपाएं
यह वह जगह है जहां hideIndex()
आता है। हम इसका उपयोग इंडेक्स को छिपाने के लिए कर सकते हैं ताकि यह पिछले उदाहरण की तरह क्वेरी प्लान पर दिखाई न दे।
db.pets.hideIndex("idx_weight_-1")
आउटपुट:
{ "hidden_old" : false, "hidden_new" : true, "ok" : 1 }
hideIndex()
. का आउटपुट विधि hidden
. के लिए पुराना मान प्रदर्शित करती है फ़ील्ड (इस मामले में false
) और नया मान (इस मामले में true
)।
हालांकि, अगर हम पहले से छिपी हुई अनुक्रमणिका को छिपाते हैं (या पहले से छिपी हुई अनुक्रमणिका को अनहाइड करते हैं), तो ये प्रदर्शित नहीं होती हैं, और हमें केवल निम्नलिखित मिलते हैं:
{ "ok" : 1 }
किसी भी स्थिति में, अनुक्रमणिका अब छिपी हुई है।
क्वेरी प्लान की दोबारा जांच करें
आइए पिछली क्वेरी को फिर से चलाते हैं यह देखने के लिए कि क्वेरी योजना अब कैसी दिखती है।
db.pets.find( { weight: { $gt: 10 } } ).explain()
परिणाम:
{ "queryPlanner" : { "plannerVersion" : 1, "namespace" : "PetHouse.pets", "indexFilterSet" : false, "parsedQuery" : { "weight" : { "$gt" : 10 } }, "queryHash" : "CEB852E7", "planCacheKey" : "851FBDB5", "winningPlan" : { "stage" : "COLLSCAN", "filter" : { "weight" : { "$gt" : 10 } }, "direction" : "forward" }, "rejectedPlans" : [ ] }, "ok" : 1 }
इस बार हमें एक COLLSCAN
मिलता है , जिसका अर्थ है कि उसने अनुक्रमणिका का उपयोग नहीं किया - उसने एक संग्रह स्कैन किया।
जांचें कि कोई अनुक्रमणिका छिपी हुई है या नहीं
आप getIndexes()
. का उपयोग कर सकते हैं यह जांचने की विधि कि कोई अनुक्रमणिका छिपी हुई है या नहीं।
इसलिए, हम वही क्वेरी चला सकते हैं जो हमने सभी इंडेक्स वापस करने के लिए पहले चलाई थी:
db.pets.getIndexes()
परिणाम:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "name" : 1, "type" : -1 }, "name" : "idx_name_1_type_-1" }, { "v" : 2, "key" : { "weight" : -1 }, "name" : "idx_weight_-1", "hidden" : true } ]
इंडेक्स छुपा नहीं सकते? इस सेटिंग को जांचें।
mongod
featureCompatibilityVersion
कम से कम 4.4
. होना चाहिए इससे पहले कि आप इंडेक्स छुपा सकें। हालांकि, एक बार छुपाए जाने के बाद, एक इंडेक्स featureCompatibilityVersion
. के साथ भी छिपा रहेगा MongoDB 4.4 बायनेरिज़ पर 4.2 पर सेट करें।
आप featureCompatibilityVersion
. की जांच कर सकते हैं निम्नलिखित कोड के साथ सेटिंग:
db.adminCommand(
{
getParameter: 1,
featureCompatibilityVersion: 1
}
)
आप इसे setFeatureCompatibilityVersion
. का उपयोग करके सेट कर सकते हैं आदेश:
db.adminCommand( { setFeatureCompatibilityVersion: "4.4" } )
setFeatureCompatibilityVersion
कमांड को admin
. में चलाने की जरूरत है डेटाबेस।
यह भी ध्यान दें, आप _id
को छुपा नहीं सकते हैं सूचकांक।