MongoDB में MySQL LIKE पैटर्न मिलान के लिए REGEX का उपयोग करना
MongoDB $regex ऑपरेटर के माध्यम से रेगुलर एक्सप्रेशन्स का उपयोग करके पैटर्न मिलान का समर्थन करता है, जो MySQL के LIKE ऑपरेटर के समान कार्यक्षमता प्रदान करता है।
नमूना डेटा बनाना
> db.likeInMongoDBDemo.insertOne({"Name" : "Sam"});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd6922857806ebf1256f123") }
> db.likeInMongoDBDemo.insertOne({"Name" : "John" });
{ "acknowledged" : true, "insertedId" : ObjectId("5cd6923157806ebf1256f124") }
> db.likeInMongoDBDemo.insertOne({"Name" : "Scott"});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd6924557806ebf1256f125") }
> db.likeInMongoDBDemo.insertOne({"Name" : "Sean"});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd6924f57806ebf1256f126") }
> db.likeInMongoDBDemo.insertOne({"Name" : "Samuel"});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd6925857806ebf1256f127") }
सभी डॉक्यूमेंट्स देखना
> db.likeInMongoDBDemo.find().pretty();
आउटपुट:
{ "_id" : ObjectId("5cd6922857806ebf1256f123"), "Name" : "Sam" }
{ "_id" : ObjectId("5cd6923157806ebf1256f124"), "Name" : "John" }
{ "_id" : ObjectId("5cd6924557806ebf1256f125"), "Name" : "Scott" }
{ "_id" : ObjectId("5cd6924f57806ebf1256f126"), "Name" : "Sean" }
{ "_id" : ObjectId("5cd6925857806ebf1256f127"), "Name" : "Samuel" }
रेगेक्स के साथ पैटर्न मिलान
"Sam" से शुरू होने वाले नाम खोजें (MySQL LIKE 'Sam%' के समान):
> db.likeInMongoDBDemo.find({"Name":{$regex:"Sam"}});
आउटपुट:
{ "_id" : ObjectId("5cd6922857806ebf1256f123"), "Name" : "Sam" }
{ "_id" : ObjectId("5cd6925857806ebf1256f127"), "Name" : "Samuel" }
सामान्य LIKE पैटर्न और उनके रेगेक्स समकक्ष
| MySQL LIKE | MongoDB $regex | विवरण |
|---|---|---|
LIKE 'Sam%' | {$regex: '^Sam'} | "Sam" से शुरू होता है |
LIKE '%Sam' | {$regex: 'Sam$'} | "Sam" पर समाप्त होता है |
LIKE '%Sam%' | {$regex: 'Sam'} | "Sam" कहीं भी होता है |
LIKE '_am' | {$regex: '^.am$'} | कोई भी अक्षर + "am" (3 अक्षर) |
LIKE 'S_m' | {$regex: '^S.m$'} | "S" + कोई भी अक्षर + "m" |
केस-इनसेंसिटिव खोज
> db.likeInMongoDBDemo.find({ "Name": { $regex: "sam", $options: "i" } });
प्रदर्शन विचार
- एंकर रेगेक्स (^ से शुरू) इंडेक्स का उपयोग कर सकते हैं यदि फील्ड इंडेक्स्ड है।
- लीडिंग वाइल्डकार्ड (%text या .*text) इंडेक्स का उपयोग नहीं कर सकते - पूर्ण संग्रह स्कैन ट्रिगर करते हैं।
- बड़े डेटासेट्स पर टेक्स्ट खोज के लिए, MongoDB टेक्स्ट इंडेक्स का उपयोग करने पर विचार करें।