MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

कैसे unhideIndex () MongoDB में काम करता है

MongoDB में, 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",
		"hidden" : true
	}
]

हम देख सकते हैं कि तीन सूचकांक हैं। तीसरा छिपा हुआ है। हम जानते हैं कि, क्योंकि इसमें "hidden" : true . है ।

वह अनुक्रमणिका weight . पर है खेत। जब हम क्वेरी प्लान के माध्यम से कोई क्वेरी चलाते हैं जो weight . को क्वेरी करती है फ़ील्ड, हम देखेंगे कि यह अनुक्रमणिका का उपयोग नहीं करता है।

उदाहरण:

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 किया था (एक संग्रह स्कैन), जिसका अर्थ है कि उसने अनुक्रमणिका का उपयोग नहीं किया।

सूचकांक दिखाएं

हम unhideIndex() . का उपयोग कर सकते हैं सूचकांक को उजागर करने की विधि। यह विधि सूचकांक के नाम या उसके प्रमुख पैटर्न को एक पैरामीटर के रूप में स्वीकार करती है ताकि यह निर्दिष्ट किया जा सके कि किस सूचकांक को दिखाना है।

उदाहरण:

db.pets.unhideIndex("idx_weight_-1")

आउटपुट:

{ "hidden_old" : true, "hidden_new" : false, "ok" : 1 }

unhideIndex() . का आउटपुट विधि hidden . के लिए पुराना मान प्रदर्शित करती है फ़ील्ड (इस मामले में true ) और नया मान (इस मामले में false )।

हालांकि, अगर हम पहले से छिपी हुई अनुक्रमणिका (या पहले से छिपी हुई अनुक्रमणिका को छिपाते हैं) को खोलते हैं, तो ये प्रदर्शित नहीं होती हैं, और हमें केवल निम्नलिखित मिलते हैं:

{ "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" : "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 . का उपयोग किया है , जिसका अर्थ है कि उसने अनुक्रमणिका का उपयोग किया है।

जांचें कि क्या इंडेक्स छिपा हुआ है या नहीं

हम 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 नहीं दिख रहा है। .

लेकिन हम "hidden" : false . भी नहीं देखते हैं ।

किसी इंडेक्स को दिखाने से बस "hidden" : true . हट जाता है getIndexes() . के परिणाम से भाग . hidden विकल्प केवल तभी उपलब्ध होता है जब मान true हो . hidden विकल्प एक बूलियन मान है, इसलिए हम यह अनुमान लगा सकते हैं कि यदि यह "hidden" : true नहीं है , तो यह "hidden" : false . है ।

अनुक्रमणिका छुपा/दिखाई नहीं दे सकते? इस सेटिंग को जांचें।

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 को छुपा नहीं सकते हैं सूचकांक।


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. स्प्रिंग डेटा MongoDB में प्रश्नों के लिए एक गाइड

  2. MongoDB से कनेक्ट करने के लिए स्प्रिंग का उपयोग कैसे करें जिसके लिए प्रमाणीकरण की आवश्यकता है

  3. मोंगो डीबी को एक कमांड में कैसे रोकें

  4. क्लस्टर नियंत्रण के साथ MongoDB 4.0 की निगरानी और संचालन प्रबंधन

  5. नेवला - के कारण ::11000 E11000 डुप्लिकेट कुंजी त्रुटि सूचकांक?