MongoDB इंडेक्सिंग ट्यूटोरियल – createIndex(), dropindex() उदाहरण
किसी भी डाटाबेस में इंडेक्स बहुत महत्वपूर्ण होते हैं, और MongoDB यह अलग नहीं है। इंडेक्स के उपयोग के साथ, क्वेरीज़ निष्पादित करना MongoDB अधिक कुशल हो जाता है.
यदि आपके पास हजारों दस्तावेजों का संग्रह है, जिनमें कोई अनुक्रमणिका नहीं है, और फिर आप कुछ दस्तावेजों को खोजने के लिए क्वेरी करते हैं, तो ऐसी स्थिति में MongoDB दस्तावेजों को खोजने के लिए पूरे संग्रह को स्कैन करना होगा। लेकिन अगर आपके पास इंडेक्स हैं, MongoDB इन अनुक्रमितों का उपयोग संग्रह में खोजे जाने वाले दस्तावेजों की संख्या को सीमित करने के लिए किया जाएगा।
इंडेक्स विशेष डेटा सेट होते हैं जो संग्रह के डेटा का आंशिक भाग संग्रहीत करते हैं। चूंकि डेटा आंशिक होता है, इसलिए इस डेटा को पढ़ना आसान हो जाता है। यह आंशिक सेट किसी विशिष्ट फ़ील्ड या फ़ील्ड के मान के अनुसार क्रमबद्ध फ़ील्ड के सेट का मान संग्रहीत करता है।
सूचकांकों के प्रभाव को समझना
अब यद्यपि परिचय से हमने देखा है कि इंडेक्स क्वेरीज़ के लिए अच्छे होते हैं, लेकिन बहुत अधिक इंडेक्स होने से अन्य ऑपरेशन जैसे इन्सर्ट, डिलीट और अपडेट ऑपरेशन धीमे हो सकते हैं।
यदि दस्तावेजों पर बार-बार सम्मिलित करने, हटाने और अद्यतन करने की क्रियाएं की जाती हैं, तो अनुक्रमणिकाओं को बार-बार बदलने की आवश्यकता होगी, जो संग्रह के लिए एक अतिरिक्त बोझ होगा।
नीचे दिया गया उदाहरण दिखाता है कि कौन से फ़ील्ड मान संग्रह में इंडेक्स का गठन कर सकते हैं। इंडेक्स या तो संग्रह में सिर्फ़ एक फ़ील्ड पर आधारित हो सकता है, या यह संग्रह में कई फ़ील्ड पर आधारित हो सकता है।
नीचे दिए गए उदाहरण में, कर्मचारी आईडी “1” और कर्मचारी कोड “AA” का उपयोग संग्रह में दस्तावेज़ों को अनुक्रमित करने के लिए किया जाता है। इसलिए जब कोई क्वेरी खोज की जाती है, तो इन अनुक्रमों का उपयोग संग्रह में आवश्यक दस्तावेज़ों को तेज़ी से और कुशलता से खोजने के लिए किया जाएगा।
इसलिए भले ही खोज क्वेरी कर्मचारी कोड “एए” पर आधारित हो, वह दस्तावेज़ वापस कर दिया जाएगा।
इंडेक्स कैसे बनाएं: createIndex()
में एक सूचकांक बनाना MongoDB “ का उपयोग करके किया जाता हैcreateIndex" तरीका।
निम्न उदाहरण दिखाता है कि संग्रह में इंडेक्स कैसे जोड़ा जाता है। मान लें कि हमारे पास एक ही कर्मचारी संग्रह है जिसमें “Employeeid” और “EmployeeName” के फ़ील्ड नाम हैं।
db.Employee.createIndex({Employeeid:1})
कोड स्पष्टीकरण:
- RSI createIndex विधि का उपयोग दस्तावेज़ के "कर्मचारी आईडी" के आधार पर एक सूचकांक बनाने के लिए किया जाता है।
- '1' पैरामीटर यह दर्शाता है कि जब इंडेक्स को “Employeeid” फ़ील्ड मानों के साथ बनाया जाता है, तो उन्हें बढ़ते क्रम में क्रमबद्ध किया जाना चाहिए। कृपया ध्यान दें कि यह _id फ़ील्ड से अलग है (आईडी फ़ील्ड का उपयोग संग्रह में प्रत्येक दस्तावेज़ को विशिष्ट रूप से पहचानने के लिए किया जाता है) जो संग्रह में स्वचालित रूप से बनाया जाता है MongoDBअब दस्तावेज़ों को Employeeid के अनुसार क्रमबद्ध किया जाएगा, न कि _id फ़ील्ड के अनुसार।
यदि आदेश सफलतापूर्वक निष्पादित होता है, तो निम्नलिखित आउटपुट दिखाया जाएगा:
आउटपुट:
- numIndexesBefore: 1 फ़ील्ड मानों (संग्रह में वास्तविक फ़ील्ड) की संख्या को इंगित करता है जो कमांड चलाने से पहले इंडेक्स में मौजूद थे। याद रखें कि प्रत्येक संग्रह में _id फ़ील्ड होती है जिसे इंडेक्स के लिए फ़ील्ड मान के रूप में भी गिना जाता है। चूँकि _id इंडेक्स फ़ील्ड संग्रह का हिस्सा है जब इसे शुरू में बनाया गया था, इसलिए numIndexesBefore का मान 1 है।
- numIndexesAfter: 2 कमांड चलाने के बाद इंडेक्स में मौजूद फ़ील्ड मानों की संख्या को इंगित करता है।
- यहां "ok: 1" आउटपुट निर्दिष्ट करता है कि ऑपरेशन सफल रहा, और नया इंडेक्स संग्रह में जोड़ा गया है।
उपरोक्त कोड दिखाता है कि एक फ़ील्ड मान के आधार पर इंडेक्स कैसे बनाया जाता है, लेकिन एकाधिक फ़ील्ड मानों के आधार पर भी इंडेक्स बनाया जा सकता है।
निम्नलिखित उदाहरण दिखाता है कि यह कैसे किया जा सकता है;
db.Employee.createIndex({Employeeid:1, EmployeeName:1])
कोड स्पष्टीकरण:
- createIndex विधि अब कई फ़ील्ड मानों को ध्यान में रखती है, जिसके कारण अब “Employeeid” और “EmployeeName” के आधार पर इंडेक्स बनाया जाएगा। Employeeid:1 और EmployeeName:1 यह संकेत देता है कि इंडेक्स को इन 2 फ़ील्ड मानों पर बनाया जाना चाहिए, जबकि :1 यह संकेत देता है कि इसे बढ़ते क्रम में होना चाहिए।
इंडेक्स कैसे खोजें: getindexes()
में एक सूचकांक ढूँढना MongoDB का उपयोग करके किया जाता है “इंडेक्स प्राप्त करें” विधि.
निम्नलिखित उदाहरण दिखाता है कि यह कैसे किया जा सकता है;
db.Employee.getIndexes()
कोड स्पष्टीकरण:
- getIndexes विधि का उपयोग किसी संग्रह में सभी अनुक्रमितों को खोजने के लिए किया जाता है।
यदि आदेश सफलतापूर्वक निष्पादित होता है, तो निम्नलिखित आउटपुट दिखाया जाएगा:
आउटपुट:
- आउटपुट एक दस्तावेज़ लौटाता है जो दिखाता है कि संग्रह में 2 इंडेक्स हैं जो _id फ़ील्ड है, और दूसरा कर्मचारी आईडी फ़ील्ड है। :1 इंगित करता है कि इंडेक्स में फ़ील्ड मान आरोही क्रम में बनाए गए हैं।
इंडेक्स कैसे हटाएं: dropindex()
में एक सूचकांक हटाना MongoDB dropIndex विधि का उपयोग करके किया जाता है।
निम्नलिखित उदाहरण दिखाता है कि यह कैसे किया जा सकता है;
db.Employee.dropIndex(Employeeid:1)
कोड स्पष्टीकरण:
- ड्रॉपइंडेक्स विधि आवश्यक फ़ील्ड मान लेती है जिन्हें इंडेक्स से हटाया जाना आवश्यक है।
यदि आदेश सफलतापूर्वक निष्पादित होता है, तो निम्नलिखित आउटपुट दिखाया जाएगा:
आउटपुट:
- nIndexesWas: 3 कमांड चलाने से पहले इंडेक्स में मौजूद फ़ील्ड मानों की संख्या को दर्शाता है। याद रखें कि प्रत्येक संग्रह में _id फ़ील्ड होती है जिसे इंडेक्स में फ़ील्ड मान के रूप में भी गिना जाता है।
- ok: 1 आउटपुट निर्दिष्ट करता है कि ऑपरेशन सफल रहा, और "Employeeid" फ़ील्ड को इंडेक्स से हटा दिया गया है।
संग्रह में एक साथ सभी अनुक्रमणिकाओं को हटाने के लिए, dropIndexes कमांड का उपयोग किया जा सकता है।
निम्नलिखित उदाहरण दिखाता है कि यह कैसे किया जा सकता है।
db.Employee.dropIndex()
कोड स्पष्टीकरण:
- dropIndexes विधि _id इंडेक्स को छोड़कर सभी इंडेक्स को हटा देगी।
यदि आदेश सफलतापूर्वक निष्पादित होता है, तो निम्नलिखित आउटपुट दिखाया जाएगा:
आउटपुट:
- nIndexesWas: 2 कमांड चलाने से पहले इंडेक्स में मौजूद फ़ील्ड मानों की संख्या को इंगित करता है।
- फिर से याद रखें कि प्रत्येक संग्रह में _id फ़ील्ड है जो इंडेक्स के लिए फ़ील्ड मान के रूप में भी गिना जाता है, और इसे हटाया नहीं जाएगा MongoDB और यह संदेश यही संकेत देता है।
- ओके: 1 आउटपुट यह निर्दिष्ट करता है कि ऑपरेशन सफल रहा।
सारांश
- किसी संग्रह में दस्तावेजों की तीव्र और कुशल खोज के लिए अनुक्रमणिकाओं को परिभाषित करना महत्वपूर्ण है।
- इंडेक्स को createIndex विधि का उपयोग करके बनाया जा सकता है। इंडेक्स को सिर्फ़ एक फ़ील्ड या कई फ़ील्ड मानों पर बनाया जा सकता है।
- getIndexes विधि का उपयोग करके अनुक्रमणिकाएँ पाई जा सकती हैं।
- एकल अनुक्रमणिकाओं के लिए dropIndex का उपयोग करके या सभी अनुक्रमणिकाओं को हटाने के लिए dropIndexes का उपयोग करके अनुक्रमणिकाओं को हटाया जा सकता है।