MongoDB-এ কেস-সেনসিটিভ (case-sensitive) স্ট্রিং ম্যাচ করার জন্য রেগুলার এক্সপ্রেশন /pattern/ সিনট্যাক্স ব্যবহার করা হয়। ডিফল্টভাবে এটি কেস-সেনসিটিভ।
কলেকশন এবং ডকুমেন্ট তৈরি
> db.demo221.insertOne({"Details":{"StudentName":"Chris","StudentAge":21}});
{ "acknowledged" : true, "insertedId" : ObjectId("5e3ee15d03d395bdc213472b") }
> db.demo221.insertOne({"Details":{"StudentName":"John","StudentAge":20}});
{ "acknowledged" : true, "insertedId" : ObjectId("5e3ee16503d395bdc213472c") }
> db.demo221.insertOne({"Details":{"StudentName":"Bob","StudentAge":22}});
{ "acknowledged" : true, "insertedId" : ObjectId("5e3ee16b03d395bdc213472d") }
> db.demo221.insertOne({"Details":{"StudentName":"john","StudentAge":24}});
{ "acknowledged" : true, "insertedId" : ObjectId("5e3ee17303d395bdc213472e") }
সব ডকুমেন্ট দেখানো
> db.demo221.find();
আউটপুট (John এবং john দুটো আলাদা):
{ "_id" : ObjectId("5e3ee15d03d395bdc213472b"), "Details" : { "StudentName" : "Chris", "StudentAge" : 21 } }
{ "_id" : ObjectId("5e3ee16503d395bdc213472c"), "Details" : { "StudentName" : "John", "StudentAge" : 20 } }
{ "_id" : ObjectId("5e3ee16b03d395bdc213472d"), "Details" : { "StudentName" : "Bob", "StudentAge" : 22 } }
{ "_id" : ObjectId("5e3ee17303d395bdc213472e"), "Details" : { "StudentName" : "john", "StudentAge" : 24 } }
কেস-সেনসিটিভ "John" খুঁজে বের করার কোয়ারী
/John/ রেগুলার এক্সপ্রেশন ব্যবহার করা হয়েছে (কেস-সেনসিটিভ):
> db.demo221.find({"Details.StudentName": /John/});
ফলাফল
{ "_id" : ObjectId("5e3ee16503d395bdc213472c"), "Details" : { "StudentName" : "John", "StudentAge" : 20 } }
ব্যাখ্যা: শুধু "John" (বড় J) মেলেছে, "john" (ছোট j) মেলেনি।
রেগুলার এক্সপ্রেশন ভেরিয়েশন:
| প্যাটার্ন | ব্যাখ্যা | মেলে যাবে |
|---|---|---|
| /John/ | কেস-সেনসিটিভ, কন্টেইনস | "John", "John Doe", "Dear John" |
| /^John$/ | এক্সাক্ট ম্যাচ (শুরু এবং শেষ) | "John" মাত্র |
| /john/i | কেস-ইনসেনসিটিভ (i ফ্ল্যাগ) | "John", "john", "JOHN", "JoHn" |
| /^J.*n$/ | J দিয়ে শুরু, n দিয়ে শেষ | "John", "Jean", "Jason" |
পারফরম্যান্স টিপস:
- রেজেক্স ইনডেক্স ব্যবহার করে না (সাধারণত) - ফুল স্ক্যান করে
^(শুরু) দিয়ে প্যাটার্ন দিলে ইনডেক্স ব্যবহার করতে পারে (prefix match)- বড় কালেকশনে টেক্সট ইনডেক্স (
db.createIndex({field: "text"})) এবং$textকোয়ারী ব্যবহার করুন
$regex অপারেটর সিনট্যাক্স (অবজেক্ট ফরম্যাট):
db.demo221.find({ "Details.StudentName": { $regex: "John", $options: "i" } })
এটি ভেরিয়েবল/ডাইনামিক প্যাটার্নের জন্য উপযোগী।