MongoDB नियमित अभिव्यक्ति (Regex) उदाहरणों के साथ
नियमित अभिव्यक्तियों का उपयोग पैटर्न मिलान के लिए किया जाता है, जो मूल रूप से दस्तावेजों के भीतर स्ट्रिंग्स को खोजने के लिए होता है।
कभी-कभी संग्रह में दस्तावेज़ों को पुनर्प्राप्त करते समय, आपको यह पता नहीं चल पाता कि किस फ़ील्ड मान को खोजना है। इसलिए, पैटर्न मिलान खोज मानों के आधार पर डेटा पुनर्प्राप्त करने में सहायता के लिए कोई रेगुलर एक्सप्रेशन का उपयोग कर सकता है।
पैटर्न मिलान के लिए $regex ऑपरेटर का उपयोग करना
RSI रेगेक्स ऑपरेटर MongoDB संग्रह में विशिष्ट स्ट्रिंग्स की खोज करने के लिए उपयोग किया जाता है। निम्न उदाहरण दिखाता है कि यह कैसे किया जा सकता है।
मान लें कि हमारे पास एक ही कर्मचारी संग्रह है जिसमें “Employeeid” और “EmployeeName” फ़ील्ड नाम हैं। मान लें कि हमारे संग्रह में निम्नलिखित दस्तावेज़ हैं।
कर्मचारी आयडी | कर्मचारी का नाम |
---|---|
22 | न्यूमार्टिन |
2 | मोहन |
3 | जो |
4 | मोहनआर |
100 | Guru99 |
6 | गुरंग |
नीचे दिए गए कोड में हमने खोज मानदंड निर्दिष्ट करने के लिए रेगेक्स ऑपरेटर का उपयोग किया है।
db.Employee.find({EmployeeName : {$regex: "Gu" }}).forEach(printjson)
कोड स्पष्टीकरण:
- यहाँ हम उन सभी कर्मचारी नामों को ढूँढना चाहते हैं जिनमें 'Gu' अक्षर हैं। इसलिए, हम 'Gu' के खोज मानदंड को परिभाषित करने के लिए $regex ऑपरेटर निर्दिष्ट करते हैं
- प्रिंटजसन का उपयोग प्रत्येक दस्तावेज़ को प्रिंट करने के लिए किया जा रहा है, जिसे क्वेरी द्वारा बेहतर तरीके से लौटाया जाता है।
यदि आदेश सफलतापूर्वक निष्पादित होता है, तो निम्नलिखित आउटपुट दिखाया जाएगा:
आउटपुट:
आउटपुट से स्पष्ट रूप से पता चलता है कि वे दस्तावेज जिनमें कर्मचारी नाम में 'गु' अक्षर शामिल हैं, वापस आ गए हैं।
मान लीजिए कि आपके संग्रह में निम्नलिखित दस्तावेज़ हैं, साथ ही एक अतिरिक्त दस्तावेज़ है जिसमें कर्मचारी का नाम "Guru999" है। यदि आपने खोज मानदंड "Guru99" के रूप में दर्ज किया है, तो यह "Guru999" वाला दस्तावेज़ भी लौटाएगा। लेकिन मान लीजिए कि हम ऐसा नहीं चाहते हैं और केवल "Guru99" वाला दस्तावेज़ लौटाना चाहते हैं। तब हम सटीक पैटर्न मिलान के साथ ऐसा कर सकते हैं। सटीक पैटर्न मिलान करने के लिए, हम ^ और $ वर्ण का उपयोग करेंगे। हम स्ट्रिंग की शुरुआत में ^ वर्ण और स्ट्रिंग के अंत में $ जोड़ेंगे।
कर्मचारी आयडी | कर्मचारी का नाम |
---|---|
22 | न्यूमार्टिन |
2 | मोहन |
3 | जो |
4 | मोहनआर |
100 | Guru99 |
6 | गुरंग |
8 | Guru999 |
निम्नलिखित उदाहरण दिखाता है कि यह कैसे किया जा सकता है।
db.Employee.find({EmployeeName : {$regex: "^Guru99$"}}).forEach(printjson)
कोड स्पष्टीकरण:
- यहाँ खोज मानदंड में, हम ^ और $ वर्ण का उपयोग कर रहे हैं। ^ का उपयोग यह सुनिश्चित करने के लिए किया जाता है कि स्ट्रिंग एक निश्चित वर्ण से शुरू होती है, और $ का उपयोग यह सुनिश्चित करने के लिए किया जाता है कि स्ट्रिंग एक निश्चित वर्ण के साथ समाप्त होती है। इसलिए जब कोड निष्पादित होता है तो यह केवल “Guru99” नाम वाली स्ट्रिंग प्राप्त करेगा।
- प्रिंटजसन का उपयोग प्रत्येक दस्तावेज़ को प्रिंट करने के लिए किया जा रहा है, जिसे क्वेरी द्वारा बेहतर तरीके से लौटाया जाता है।
यदि आदेश सफलतापूर्वक निष्पादित होता है, तो निम्नलिखित आउटपुट दिखाया जाएगा:
आउटपुट:
आउटपुट में यह स्पष्ट रूप से दिखाई देता है कि स्ट्रिंग “Guru99” प्राप्त हुई है।
$options के साथ पैटर्न मिलान
रेगेक्स ऑपरेटर का उपयोग करते समय, अतिरिक्त विकल्प भी प्रदान किए जा सकते हैं $विकल्प कीवर्ड। उदाहरण के लिए, मान लीजिए कि आप उन सभी दस्तावेज़ों को ढूँढना चाहते हैं जिनके कर्मचारी नाम में 'गु' है, चाहे वह केस सेंसिटिव हो या इनसेंसिटिव। यदि ऐसा परिणाम वांछित है, तो हमें इसका उपयोग करने की आवश्यकता है $विकल्प केस असंवेदनशीलता पैरामीटर के साथ.
निम्नलिखित उदाहरण दिखाता है कि यह कैसे किया जा सकता है।
मान लें कि हमारे पास एक ही कर्मचारी संग्रह है जिसमें “Employeeid” और “EmployeeName” के फ़ील्ड नाम हैं।
यह भी मान लें कि हमारे संग्रह में निम्नलिखित दस्तावेज हैं।
कर्मचारी आयडी | कर्मचारी का नाम |
---|---|
22 | न्यूमार्टिन |
2 | मोहन |
3 | जो |
4 | मोहनआर |
100 | Guru99 |
6 | गुरंग |
7 | गुरु99 |
अब अगर हम पिछले विषय की तरह ही क्वेरी चलाते हैं, तो हमें परिणाम में “GURU99” वाला दस्तावेज़ कभी नहीं दिखाई देगा। यह सुनिश्चित करने के लिए कि यह परिणाम सेट में आए, हमें $options “I” पैरामीटर जोड़ना होगा।
db.Employee.find({EmployeeName:{$regex: "Gu",$options:'i'}}).forEach(printjson)
कोड स्पष्टीकरण:
- 'I' पैरामीटर वाले $options (जिसका अर्थ है केस असंवेदनशीलता) यह निर्दिष्ट करता है कि हम खोज जारी रखना चाहते हैं, चाहे हमें 'Gu' अक्षर लोअर केस में मिले या अपर केस में।
यदि आदेश सफलतापूर्वक निष्पादित होता है, तो निम्नलिखित आउटपुट दिखाया जाएगा:
आउटपुट:
- आउटपुट से स्पष्ट रूप से पता चलता है कि भले ही एक दस्तावेज़ में बड़ा अक्षर 'Gu' है, फिर भी दस्तावेज़ परिणाम सेट में प्रदर्शित होता है।
रेगेक्स ऑपरेटर के बिना पैटर्न मिलान
आप बिना रेगेक्स ऑपरेटर के भी पैटर्न मैचिंग कर सकते हैं। निम्न उदाहरण दिखाता है कि यह कैसे किया जा सकता है।
db.Employee.find({EmployeeName: /Gu/'}).forEach(printjson)
कोड स्पष्टीकरण:
- “//” विकल्प का मतलब मूल रूप से इन सीमांककों के भीतर अपने खोज मानदंड को निर्दिष्ट करना है। इसलिए, हम उन दस्तावेज़ों को फिर से खोजने के लिए /Gu/ निर्दिष्ट कर रहे हैं जिनके कर्मचारी नाम में 'Gu' है।
यदि आदेश सफलतापूर्वक निष्पादित होता है, तो निम्नलिखित आउटपुट दिखाया जाएगा:
आउटपुट:
आउटपुट से स्पष्ट रूप से पता चलता है कि वे दस्तावेज जिनमें कर्मचारी नाम में 'गु' अक्षर शामिल हैं, वापस आ गए हैं।
किसी संग्रह से अंतिम 'n' दस्तावेज़ प्राप्त करना
किसी संग्रह में अंतिम n दस्तावेज़ प्राप्त करने के विभिन्न तरीके हैं।
आइये निम्नलिखित चरणों के माध्यम से एक तरीका देखें
निम्नलिखित उदाहरण दिखाता है कि यह कैसे किया जा सकता है।
मान लें कि हमारे पास एक ही कर्मचारी संग्रह है जिसमें “Employeeid” और “EmployeeName” के फ़ील्ड नाम हैं।
यह भी मान लें कि हमारे संग्रह में निम्नलिखित दस्तावेज़ हैं:
कर्मचारी आयडी | कर्मचारी का नाम |
---|---|
22 | न्यूमार्टिन |
2 | मोहन |
3 | जो |
4 | मोहनआर |
100 | Guru99 |
6 | गुरंग |
7 | गुरु99 |
db.Employee.find().sort({_id:-1}).limit(2).forEach(printjson)
कोड स्पष्टीकरण:
1) दस्तावेजों के लिए क्वेरी करते समय, संग्रह में _id फ़ील्ड मान के आधार पर रिकॉर्ड्स को रिवर्स ऑर्डर में सॉर्ट करने के लिए सॉर्ट फ़ंक्शन का उपयोग करें। -1 मूल रूप से दस्तावेजों को रिवर्स ऑर्डर या अवरोही क्रम में सॉर्ट करने का संकेत देता है ताकि अंतिम दस्तावेज़ प्रदर्शित होने वाला पहला दस्तावेज़ बन जाए।
2) फिर लिमिट क्लॉज का उपयोग करके केवल अपने इच्छित रिकॉर्ड की संख्या प्रदर्शित करें। यहाँ हमने लिमिट क्लॉज (2) सेट किया है, इसलिए यह अंतिम दो दस्तावेज़ों को लाएगा।
यदि आदेश सफलतापूर्वक निष्पादित होता है, तो निम्नलिखित आउटपुट दिखाया जाएगा:
आउटपुट:
आउटपुट स्पष्ट रूप से दिखाता है कि संग्रह में अंतिम दो दस्तावेज़ प्रदर्शित किए गए हैं। इसलिए हमने स्पष्ट रूप से दिखाया है कि संग्रह में अंतिम 'n' दस्तावेज़ों को लाने के लिए, हम पहले दस्तावेज़ों को अवरोही क्रम में सॉर्ट कर सकते हैं और फिर आवश्यक 'n' दस्तावेज़ों की संख्या को वापस करने के लिए सीमा खंड का उपयोग कर सकते हैं।
नोटयदि खोज किसी स्ट्रिंग पर की जाती है जो 38,000 वर्णों से अधिक है, तो यह सही परिणाम प्रदर्शित नहीं करेगी।
सारांश
- पैटर्न मिलान $regex ऑपरेटर द्वारा प्राप्त किया जा सकता है। इस ऑपरेटर का उपयोग संग्रह में कुछ स्ट्रिंग्स को खोजने के लिए किया जा सकता है।
- ^ और $ प्रतीक का उपयोग सटीक पाठ खोज के लिए किया जा सकता है, जिसमें ^ का उपयोग यह सुनिश्चित करने के लिए किया जाता है कि स्ट्रिंग एक निश्चित वर्ण से शुरू होती है और $ का उपयोग यह सुनिश्चित करने के लिए किया जाता है कि स्ट्रिंग एक निश्चित वर्ण पर समाप्त होती है।
- 'i' के साथ $regex ऑपरेटर का उपयोग केस असंवेदनशीलता को निर्दिष्ट करने के लिए किया जा सकता है, ताकि स्ट्रिंग्स को खोजा जा सके, चाहे वे लोअर केस में हों या अपर केस में।
- डिलीमीटर // का उपयोग पैटर्न मिलान के लिए भी किया जा सकता है।
- संग्रह में अंतिम n दस्तावेज़ों को वापस करने के लिए सॉर्ट और लिमिट फ़ंक्शन के संयोजन का उपयोग करें। सॉर्ट फ़ंक्शन का उपयोग दस्तावेज़ों को अवरोही क्रम में वापस करने के लिए किया जा सकता है जिसके बाद लिमिट क्लॉज़ का उपयोग वापस किए जा रहे दस्तावेज़ों की संख्या को सीमित करने के लिए किया जा सकता है।