MongoDB - नियमित अभिव्यक्ति

किसी भी स्ट्रिंग में एक पैटर्न या शब्द की खोज के लिए सभी भाषाओं में नियमित अभिव्यक्तियों का अक्सर उपयोग किया जाता है। MongoDB स्ट्रिंग पैटर्न के मिलान के लिए नियमित अभिव्यक्ति की कार्यक्षमता प्रदान करता है$regexऑपरेटर। MongoDB पीसीआर (पर्ल कम्पेटिबल रेगुलर एक्सप्रेशन) को नियमित अभिव्यक्ति भाषा के रूप में उपयोग करता है।

पाठ खोज के विपरीत, हमें नियमित अभिव्यक्ति का उपयोग करने के लिए कोई कॉन्फ़िगरेशन या कमांड करने की आवश्यकता नहीं है।

मान लें कि हमने नाम के डेटाबेस में एक दस्तावेज़ डाला है posts जैसा कि नीचे दिखाया गया है -

> db.posts.insert(
{
   "post_text": "enjoy the mongodb articles on tutorialspoint",
   "tags": [
      "mongodb",
      "tutorialspoint"
   ]
}
WriteResult({ "nInserted" : 1 })

रेगेक्स एक्सप्रेशन का उपयोग करना

निम्नलिखित regex क्वेरी स्ट्रिंग वाले सभी पदों के लिए खोज करता है tutorialspoint इसमें -

> db.posts.find({post_text:{$regex:"tutorialspoint"}}).pretty()
{
	"_id" : ObjectId("5dd7ce28f1dd4583e7103fe0"),
	"post_text" : "enjoy the mongodb articles on tutorialspoint",
	"tags" : [
		"mongodb",
		"tutorialspoint"
	]
}
{
	"_id" : ObjectId("5dd7d111f1dd4583e7103fe2"),
	"post_text" : "enjoy the mongodb articles on tutorialspoint",
	"tags" : [
		"mongodb",
		"tutorialspoint"
	]
}
>

उसी क्वेरी को भी लिखा जा सकता है -

>db.posts.find({post_text:/tutorialspoint/})

केस असंवेदनशील के साथ रेगेक्स एक्सप्रेशन का उपयोग करना

खोज के मामले को असंवेदनशील बनाने के लिए, हम इसका उपयोग करते हैं $options मान के साथ पैरामीटर $i। निम्नलिखित कमांड शब्द होने वाले तार के लिए दिखेगाtutorialspointछोटे या पूंजीगत मामले के बावजूद -

>db.posts.find({post_text:{$regex:"tutorialspoint",$options:"$i"}})

इस क्वेरी से दिए गए परिणामों में से एक निम्नलिखित दस्तावेज है जिसमें शब्द शामिल है tutorialspoint विभिन्न मामलों में -

{
   "_id" : ObjectId("53493d37d852429c10000004"),
   "post_text" : "hey! this is my post on TutorialsPoint", 
   "tags" : [ "tutorialspoint" ]
}

सरणी तत्वों के लिए रेगेक्स का उपयोग करना

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

>db.posts.find({tags:{$regex:"tutorial"}})

नियमित अभिव्यक्ति क्वेरी का अनुकूलन

  • यदि दस्तावेज़ फ़ील्ड हैं indexed, क्वेरी नियमित अभिव्यक्ति से मेल खाने के लिए अनुक्रमित मूल्यों का उपयोग करेगी। यह पूरे संग्रह को स्कैन करने वाली नियमित अभिव्यक्ति की तुलना में खोज को बहुत तेज़ बनाता है।

  • यदि नियमित अभिव्यक्ति ए है prefix expression, सभी मैच एक निश्चित स्ट्रिंग पात्रों के साथ शुरू करने के लिए होते हैं। उदाहरण के लिए, यदि रेगेक्स अभिव्यक्ति है^tut, फिर क्वेरी को केवल उन स्ट्रिंग्स की खोज करनी है जो इसके साथ शुरू होती हैं tut