यदि आप MongoDB में एकाधिक अनुक्रमणिका छोड़ते समय "इंडेक्स नाम एक स्ट्रिंग होना चाहिए" त्रुटि का सामना करते हैं, तो शायद यह इसलिए है क्योंकि आप नाम के बजाय विनिर्देश दस्तावेज़ पास कर रहे हैं।
जब आप dropIndexes()
. का उपयोग करते हैं विधि या dropIndexes
एकाधिक अनुक्रमणिका छोड़ने के लिए आदेश, आपको अनुक्रमणिका नाम pass पास करने की आवश्यकता है (विनिर्देशों के दस्तावेज नहीं) एक सरणी में।
उदाहरण अनुक्रमणिका
मान लीजिए कि हमारे पास निम्नलिखित सूचकांक हैं:
db.posts.getIndexes()
परिणाम:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" }, { "v" : 2, "key" : { "title" : 1 }, "name" : "title_1" }, { "v" : 2, "key" : { "_fts" : "text", "_ftsx" : 1 }, "name" : "body_text", "weights" : { "body" : 1 }, "default_language" : "english", "language_override" : "language", "textIndexVersion" : 3 } ]
समस्या कोड
यहां कोड का एक उदाहरण दिया गया है जो इस त्रुटि का कारण बनता है:
db.posts.dropIndexes( [
{ "_fts" : "text", "_ftsx" : 1 },
{ "title" : 1 }
] )
परिणाम:
uncaught exception: Error: error dropping indexes : { "ok" : 0, "errmsg" : "dropIndexes krankykranes.posts (f9083c2c-8291-49d1-95f7-40711186db98) failed to drop multiple indexes [ { _fts: \"text\", _ftsx: 1.0 }, { title: 1.0 } ]: index name must be a string", "code" : 14, "codeName" : "TypeMismatch" } : [email protected]/mongo/shell/utils.js:25:13 [email protected]/mongo/shell/collection.js:692:11 @(shell):1:1
इस उदाहरण में, मैं उनके विनिर्देश दस्तावेज़ों को पारित करके दो अनुक्रमणिका को हटाने का प्रयास कर रहा हूं, लेकिन मुझे एक त्रुटि मिलती है। मुझे इसके बजाय अनुक्रमणिका नाम पास करने की आवश्यकता है।
समाधान
इस समस्या को ठीक करने के लिए, मुझे केवल उनके विनिर्देश दस्तावेज़ के बजाय अनुक्रमणिका नाम पास करने होंगे:
db.posts.dropIndexes( [
"body_text",
"title_1"
] )
परिणाम:
{ "nIndexesWas" : 3, "ok" : 1 }
यह बताता है कि अनुक्रमणिका सफलतापूर्वक गिरा दी गई थी।
परिणाम जांचें
हम getIndexes()
चला सकते हैं फिर से सत्यापित करने के लिए कि अनुक्रमणिका अब मौजूद नहीं हैं।
db.posts.getIndexes()
परिणाम:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]
दोनों इंडेक्स को उम्मीद के मुताबिक गिरा दिया गया है।