MongoDB केस-असंवेदनशील इंडेक्स कैसे बनाएं
इस पोस्ट में, हम आपको दिखाएंगे कि MongoDB में Collations का उपयोग करके केस-असंवेदनशील इंडेक्स कैसे बनाया जाता है, MongoDB द्वारा संस्करण 3.4 में जारी एक नई सुविधा।
केस-असंवेदनशील इंडेक्स क्या होते हैं?
केस-असंवेदनशील इंडेक्स उन प्रश्नों का समर्थन करते हैं जो अक्षर केस की परवाह किए बिना स्ट्रिंग तुलना करते हैं, और MongoDB 3.4 के Collation के समर्थन के साथ, इन्हें अब बनाना संभव है। Collation आपको स्ट्रिंग तुलना के लिए भाषा-विशिष्ट नियम निर्दिष्ट करने की क्षमता देता है। चूंकि MongoDB के पिछले संस्करण Collation का समर्थन नहीं करते थे, इसलिए आप केस-संवेदी अनुक्रमणिका तुलना करने तक सीमित थे। जिन परिदृश्यों में केस-असंवेदनशील व्यवहार की आवश्यकता होती है, उनमें केवल एक ही विकल्प होता है कि आप अपने सभी स्ट्रिंग्स को अपरकेस या लोअरकेस में कनवर्ट/स्टोर करें और फिर तुलना करें। जैसा कि आप कल्पना कर सकते हैं, इससे प्रश्नों और अनुक्रमणिका संचालन में बहुत परेशानी होती है।
संक्रमण गुण को संग्रह स्तर पर या स्पष्ट रूप से अनुक्रमणिका बनाते समय सेट किया जा सकता है।
-
कोलेशन प्रॉपर्टी को कलेक्शन लेवल पर सेट करें
यदि संग्रह स्तर पर सेट किया गया है, तो इसे प्रत्येक क्रिएट-इंडेक्स कमांड के साथ निर्दिष्ट करने की आवश्यकता नहीं है क्योंकि इंडेक्स संग्रह के संयोजन को प्राप्त करता है . जब तक निर्माण समय के दौरान स्पष्ट रूप से निर्दिष्ट नहीं किया जाता है, तब तक संग्रह के साथ कोई कोलेशन संबद्ध नहीं होता है। आप नीचे दिए गए आदेशों का उपयोग करके अपने संग्रह का मिलान विवरण निर्धारित कर सकते हैं:
>db.createCollection("test") >db.getCollectionInfos({name: test'}); [ { "name" : "test", "type" : "collection", "options" : { }, "info" : { "readOnly" : false }, "idIndex" : { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "test.test" } } ]
-
इंडेक्स बनाते समय कोलेशन प्रॉपर्टी सेट करें
यहां बताया गया है कि आप एक संग्रह बनाते समय एक Collation को स्पष्ट रूप से कैसे निर्दिष्ट कर सकते हैं:
>db.createCollection("test2", { collation: { locale: 'en_US', strength: 2 } } ); >db.getCollectionInfos({name: 'test2'}) [ { "name" : "test2", "type" : "collection", "options" : { "collation" : { "locale" : "en_US", "caseLevel" : false, "caseFirst" : "off", "strength" : 2, "numericOrdering" : false, "alternate" : "non-ignorable", "maxVariable" : "punct", "normalization" : false, "backwards" : false, "version" : "57.1" } }, "info" : { "readOnly" : false }, "idIndex" : { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "test.test2", "collation" : { "locale" : "en_US", "caseLevel" : false, "caseFirst" : "off", "strength" : 2, "numericOrdering" : false, "alternate" : "non-ignorable", "maxVariable" : "punct", "normalization" : false, "backwards" : false, "version" : "57.1" } } } ]
-
इंडेक्स बनाते समय कोलेशन प्रॉपर्टी सेट करें
आपके पास किसी इंडेक्स को बनाते समय कोलेशन को स्पष्ट रूप से सेट करने का विकल्प भी होता है। उदाहरण के लिए, स्थानीय 'एन' और स्ट्रेंथ 2 के साथ परीक्षण संग्रह की नाम संपत्ति पर "इंडेक्स" जोड़ना:
>db.test.createIndex( { name: 1}, { collation: { locale: 'en', strength: 2 } })
-
Collation का उपयोग करके क्वेरी कैसे करें
Collation के साथ निर्मित इंडेक्स का उपयोग करने के लिए Collation प्रॉपर्टी को क्वेरी समय पर निर्दिष्ट करने की आवश्यकता होती है:
db.test.find({name:'blah'})
MongoDB में कॉलेशन के साथ केस-असंवेदनशील इंडेक्स को क्वेरी कैसे करेंट्वीट करने के लिए क्लिक करें
-
अपनी क्वेरी में कोलेशन निर्दिष्ट करें
यह क्वेरी ऊपर निर्दिष्ट इंडेक्स का उपयोग नहीं करेगी क्योंकि Collation निर्दिष्ट नहीं किया गया था। Collation का लाभ उठाने के लिए, हमें इसे क्वेरी में स्पष्ट रूप से निर्दिष्ट करने की आवश्यकता है:
db.test.find({name:'blah'}).collation({ locale: 'en', strength: 2 })
भले ही आपके संग्रह में एक डिफ़ॉल्ट Collation हो, फिर भी आपको अपनी क्वेरी में Collation को निर्दिष्ट करना होगा। अन्यथा, MongoDB विशिष्ट अनुक्रमणिका का उपयोग नहीं करेगा:
-
एक पुराने MongoDB संस्करण (3.2.x) से अपग्रेड करते समय संयोजन
यदि आप MongoDB के पुराने संस्करण से अपग्रेड करते हैं (उदा. 3.2.x), तो मौजूदा इंडेक्स Collation का समर्थन नहीं करेंगे। Collation को चालू और चलाने के लिए, आपका पहला कदम यह सुनिश्चित करना है कि 3.4.x की सभी नई सुविधाएं चालू हैं:
db.adminCommand( { setFeatureCompatibilityVersion: "3.4" } )
CollationClick To Tweet का उपयोग करके केस-असंवेदनशील अनुक्रमणिका बनाने के लिए #MongoDB संस्करण अपग्रेड करेंअसंगतताओं के बारे में अधिक जानकारी MongoDB 3.x रिलीज नोट्स में दी गई है। कृपया ध्यान दें कि एक बार जब आप इन चरणों को पूरा कर लेते हैं, तो वापस 3.2 पर डाउनग्रेड करना कठिन हो जाता है। हमारा अगला कदम आपकी अनुक्रमणिका के संस्करण की जांच करना है।
एक बार जब आप 3.4 संगतताओं में अपग्रेड कर लेते हैं, तो आप हमारे द्वारा पहले बताए गए चरणों का पालन करके नई अनुक्रमणिका बना सकते हैं। अगर आप एक बड़ा इंडेक्स बना रहे हैं, तो कृपया अपने इंडेक्स जोड़ने के लिए स्केलग्रिड रोलिंग इंडेक्स बिल्ड जॉब का इस्तेमाल करें: