उदाहरणों के साथ MongoDB नियमित अभिव्यक्ति (Regex)

विषय - सूची:

Anonim

पैटर्न मिलान के लिए नियमित अभिव्यक्ति का उपयोग किया जाता है, जो मूल रूप से दस्तावेजों के भीतर निष्कर्ष स्ट्रिंग के लिए है।

कभी-कभी किसी संग्रह में दस्तावेज़ों को पुनर्प्राप्त करते समय, आप शायद नहीं जानते कि खोज करने के लिए सटीक फ़ील्ड मूल्य क्या है। इसलिए, पैटर्न मिलान खोज मूल्यों के आधार पर डेटा को पुनः प्राप्त करने में सहायता के लिए व्यक्ति नियमित अभिव्यक्तियों का उपयोग कर सकता है।

इस ट्यूटोरियल में, आप सीखेंगे -

  • पैटर्न मिलान के लिए $ रेगेक्स ऑपरेटर का उपयोग करना
  • $ विकल्पों के साथ पैटर्न मिलान
  • रेगेक्स ऑपरेटर के बिना पैटर्न मिलान
  • एक संग्रह से अंतिम 'एन' दस्तावेज प्राप्त करना

पैटर्न मिलान के लिए $ रेगेक्स ऑपरेटर का उपयोग करना

MongoDB में रेगेक्स ऑपरेटर का उपयोग संग्रह में विशिष्ट तारों की खोज के लिए किया जाता है। निम्न उदाहरण दिखाता है कि यह कैसे किया जा सकता है।

मान लेते हैं कि हमारे पास अपना समान कर्मचारी संग्रह है जिसमें "कर्मचारी" और "कर्मचारी नाम" के फील्ड नाम हैं। चलो यह भी मानते हैं कि हमारे संग्रह में निम्नलिखित दस्तावेज हैं।

कर्मचारी आयडी कर्मचारी का नाम
२२ न्यूमार्टिन
मोहन
जो
मोहन
100 गुरु ९९
गुरंग

यहां नीचे दिए गए कोड में हमने खोज मापदंड को निर्दिष्ट करने के लिए regex ऑपरेटर का उपयोग किया है।

db.Employee.find({EmployeeName : {$regex: "Gu" }}).forEach(printjson)

कोड स्पष्टीकरण:

  1. यहां हम सभी कर्मचारी नाम ढूंढना चाहते हैं, जिनमें 'Gu' अक्षर हैं। इसलिए, हम 'गु' के खोज मापदंड को परिभाषित करने के लिए $ रेगेक्स ऑपरेटर को निर्दिष्ट करते हैं
  2. प्रिंटजसन का उपयोग प्रत्येक दस्तावेज़ को प्रिंट करने के लिए किया जा रहा है जो क्वेरी द्वारा बेहतर तरीके से वापस किया जाता है।

यदि कमांड को सफलतापूर्वक निष्पादित किया जाता है, तो निम्न आउटपुट दिखाया जाएगा:

आउटपुट:

आउटपुट से स्पष्ट रूप से पता चलता है कि उन दस्तावेजों में जहां कर्मचारी का नाम 'गु' अक्षर है, वापस आ गए हैं।

यदि मान लें कि आपके संग्रह में एक अतिरिक्त दस्तावेज़ के साथ निम्नलिखित दस्तावेज़ हैं, जिसमें कर्मचारी का नाम "Guru999" है। यदि आप खोज मापदंड "गुरु 99" के रूप में दर्ज करते हैं, तो यह उस दस्तावेज़ को भी लौटा देगा जिसमें "गुरु 999" था। लेकिन मान लीजिए अगर हम ऐसा नहीं चाहते थे और केवल "गुरु 99" के साथ दस्तावेज वापस करना चाहते थे। फिर हम सटीक पैटर्न मिलान के साथ ऐसा कर सकते हैं। एक सटीक पैटर्न मिलान करने के लिए, हम और $ वर्ण का उपयोग करेंगे। हम स्ट्रिंग की शुरुआत में और स्ट्रिंग के अंत में $ जोड़ देंगे।

कर्मचारी आयडी कर्मचारी का नाम
२२ न्यूमार्टिन
मोहन
जो
मोहन
100 गुरु ९९
गुरंग
गुरु 999

निम्न उदाहरण दिखाता है कि यह कैसे किया जा सकता है।

db.Employee.find({EmployeeName : {$regex: "^Guru99$"}}).forEach(printjson) 

कोड स्पष्टीकरण:

  1. यहां खोज मापदंड में, हम और $ वर्ण का उपयोग कर रहे हैं। का उपयोग यह सुनिश्चित करने के लिए किया जाता है कि स्ट्रिंग एक निश्चित चरित्र से शुरू होती है, और यह सुनिश्चित करने के लिए $ का उपयोग किया जाता है कि स्ट्रिंग एक निश्चित चरित्र के साथ समाप्त होती है। इसलिए जब कोड निष्पादित होता है तो यह केवल "Guru99" नाम के साथ स्ट्रिंग लाएगा।
  2. प्रिंटजसन का उपयोग प्रत्येक दस्तावेज़ को प्रिंट करने के लिए किया जा रहा है जो क्वेरी द्वारा बेहतर तरीके से वापस किया जाता है।

यदि कमांड को सफलतापूर्वक निष्पादित किया जाता है, तो निम्न आउटपुट दिखाया जाएगा:

आउटपुट:

आउटपुट में, यह स्पष्ट रूप से दिखाई देता है कि स्ट्रिंग "गुरू 99" लाया जाता है।

$ विकल्पों के साथ पैटर्न मिलान

रेगेक्स ऑपरेटर का उपयोग करते समय कोई भी $ विकल्प कीवर्ड का उपयोग करके अतिरिक्त विकल्प प्रदान कर सकता है । उदाहरण के लिए, मान लें कि आप सभी दस्तावेजों को खोजना चाहते थे, जो उनके कर्मचारी नाम में 'गु' थे, चाहे वह संवेदनशील या असंवेदनशील हो। यदि ऐसा कोई परिणाम वांछित है, तो हमें केस इंस्पिरेशन पैरामीटर के साथ $ विकल्पों का उपयोग करने की आवश्यकता है ।

निम्न उदाहरण दिखाता है कि यह कैसे किया जा सकता है।

मान लेते हैं कि हमारे पास अपना समान कर्मचारी संग्रह है जिसमें "कर्मचारी" और "कर्मचारी नाम" के फील्ड नाम हैं।

चलो यह भी मानते हैं कि हमारे संग्रह में निम्नलिखित दस्तावेज हैं।

कर्मचारी आयडी कर्मचारी का नाम
२२ न्यूमार्टिन
मोहन
जो
मोहन
100 गुरु ९९
गुरंग
GURU99

अब यदि हम उसी क्वेरी को अंतिम विषय के रूप में चलाते हैं, तो हम कभी भी परिणाम में "GURU99" के साथ दस्तावेज़ नहीं देखेंगे। यह सुनिश्चित करने के लिए कि परिणाम सेट में आता है, हमें $ विकल्प "I" पैरामीटर को जोड़ना होगा।

db.Employee.find({EmployeeName:{$regex: "Gu",$options:'i'}}).forEach(printjson) 

कोड स्पष्टीकरण:

  1. 'आई' पैरामीटर (जिसका अर्थ है कि असंवेदनशीलता) के साथ $ विकल्प निर्दिष्ट करते हैं कि हम खोज को कोई फर्क नहीं पड़ना चाहते हैं अगर हमें अक्षर 'गु' कम या ऊपरी मामले में मिलते हैं।

यदि कमांड को सफलतापूर्वक निष्पादित किया जाता है, तो निम्न आउटपुट दिखाया जाएगा:

आउटपुट:

  1. आउटपुट स्पष्ट रूप से दिखाता है कि भले ही एक दस्तावेज़ में ऊपरी मामला 'गुजरात' है, फिर भी दस्तावेज़ परिणाम सेट में प्रदर्शित होता है।

रेगेक्स ऑपरेटर के बिना पैटर्न मिलान

रेगेक्स ऑपरेटर के बिना एक पैटर्न मिलान भी कर सकता है। निम्न उदाहरण दिखाता है कि यह कैसे किया जा सकता है।

db.Employee.find({EmployeeName: /Gu/'}).forEach(printjson)

कोड स्पष्टीकरण:

  1. "//" विकल्प मूल रूप से इन सीमांकक के भीतर अपने खोज मानदंडों को निर्दिष्ट करने का मतलब है। इसलिए, हम उन दस्तावेजों को फिर से खोजने के लिए / Gu / निर्दिष्ट कर रहे हैं, जिनके EmployeeName में 'Gu' हैं।

यदि कमांड को सफलतापूर्वक निष्पादित किया जाता है, तो निम्न आउटपुट दिखाया जाएगा:

आउटपुट:

आउटपुट से स्पष्ट रूप से पता चलता है कि उन दस्तावेजों में जहां कर्मचारी का नाम 'गु' अक्षर है, वापस आ गए हैं।

एक संग्रह से अंतिम 'एन' दस्तावेज प्राप्त करना

एक संग्रह में अंतिम n दस्तावेज़ प्राप्त करने के विभिन्न तरीके हैं।

आइए निम्नलिखित चरणों के माध्यम से किसी एक तरीके को देखें

निम्न उदाहरण दिखाता है कि यह कैसे किया जा सकता है।

मान लेते हैं कि हमारे पास अपना समान कर्मचारी संग्रह है जिसमें "कर्मचारी" और "कर्मचारी नाम" के फील्ड नाम हैं।

चलो यह भी मानते हैं कि हमारे संग्रह में निम्नलिखित दस्तावेज हैं:

कर्मचारी आयडी कर्मचारी का नाम
२२ न्यूमार्टिन
मोहन
जो
मोहन
100 गुरु ९९
गुरंग
GURU99
db.Employee.find().sort({_id:-1}).limit(2).forEach(printjson)

कोड स्पष्टीकरण:

1) दस्तावेज़ों के लिए क्वेरी करते समय, संग्रह में _id फ़ील्ड मान के आधार पर रिकॉर्ड्स को रिवर्स ऑर्डर में सॉर्ट करने के लिए सॉर्ट फ़ंक्शन का उपयोग करें। -1 मूल रूप से दस्तावेजों को रिवर्स ऑर्डर या अवरोही क्रम में क्रमबद्ध करने का संकेत देता है ताकि अंतिम दस्तावेज प्रदर्शित होने वाला पहला दस्तावेज बन जाए।

2) उसके बाद अपने इच्छित रिकॉर्ड की संख्या को प्रदर्शित करने के लिए लिमिट क्लॉज का उपयोग करें। यहां हमने सीमा खंड (2) निर्धारित किया है, इसलिए यह अंतिम दो दस्तावेज लाएगा।

यदि कमांड को सफलतापूर्वक निष्पादित किया जाता है, तो निम्न आउटपुट दिखाया जाएगा:

आउटपुट:

आउटपुट स्पष्ट रूप से दिखाता है कि संग्रह में अंतिम दो दस्तावेज़ प्रदर्शित किए गए हैं। इसलिए हमने स्पष्ट रूप से दिखाया है कि संग्रह में अंतिम 'एन' दस्तावेजों को लाने के लिए, हम पहले दस्तावेजों को अवरोही क्रम में सॉर्ट कर सकते हैं और फिर आवश्यक दस्तावेजों की संख्या 'एन' को वापस करने के लिए लिमिट क्लॉज का उपयोग कर सकते हैं।

नोट : यदि खोज एक स्ट्रिंग पर की जाती है जो कि 38,000 वर्णों से अधिक है, तो यह सही परिणाम प्रदर्शित नहीं करेगा।

सारांश:

  • पैटर्न मिलान $ रेगेक्स ऑपरेटर द्वारा प्राप्त किया जा सकता है। इस ऑपरेटर का उपयोग संग्रह में कुछ तारों को खोजने के लिए किया जा सकता है।
  • और $ प्रतीक का उपयोग सटीक पाठ खोजों के लिए के साथ किया जा सकता है जिसका उपयोग यह सुनिश्चित करने के लिए किया जा रहा है कि स्ट्रिंग एक निश्चित चरित्र से शुरू होती है और $ यह सुनिश्चित करने के लिए उपयोग किया जाता है कि स्ट्रिंग एक निश्चित चरित्र के साथ समाप्त होती है।
  • $ Regex ऑपरेटर के साथ 'i' का उपयोग केस असंवेदनशीलता को निर्दिष्ट करने के लिए किया जा सकता है ताकि स्ट्रिंग्स को खोजा जा सके कि वे निचले मामले में हैं या ऊपरी मामले में।
  • Delimiters // का उपयोग पैटर्न मिलान के लिए भी किया जा सकता है।
  • संग्रह में अंतिम एन दस्तावेजों को वापस करने के लिए सॉर्ट और सीमा फ़ंक्शन के संयोजन का उपयोग करें। सॉर्ट फ़ंक्शन का उपयोग अवरोही क्रम में दस्तावेजों को वापस करने के लिए किया जा सकता है जिसके बाद सीमा क्लॉज का उपयोग किए जाने वाले दस्तावेजों की संख्या को सीमित करने के लिए किया जा सकता है।