MongoDB-এ কোনো ফিল্ডের মানকে অন্য ফিল্ডে রেগুলার এক্সপ্রেশন (regex) প্যাটার্ন হিসেবে ব্যবহার করতে $indexOfCP (code point index) অপারেটর ব্যবহার করা যায়। এটি $regex-এর চেয়ে দ্রুত এবং কার্যকর।
কলেকশন এবং ডকুমেন্ট তৈরি
> db.demo88.insertOne({
... "Name": "Chris",
... "PassoutYear": "2020",
... "websiteName": "chris.shop.com/Carol-2020-"
... });
{ "acknowledged" : true, "insertedId" : ObjectId("5e2c14c471bf0181ecc422b1") }
> db.demo88.insertOne({
... "Name": "David",
... "PassoutYear": "2010",
... "websiteName": "david.bigshop.com/David-2010-"
... });
{ "acknowledged" : true, "insertedId" : ObjectId("5e2c14c571bf0181ecc422b2") }
সব ডকুমেন্ট দেখানো
> db.demo88.find();
আউটপুট:
{ "_id" : ObjectId("5e2c14c471bf0181ecc422b1"), "Name" : "Chris", "PassoutYear" : "2020", "websiteName" : "chris.shop.com/Carol-2020-" }
{ "_id" : ObjectId("5e2c14c571bf0181ecc422b2"), "Name" : "David", "PassoutYear" : "2010", "websiteName" : "david.bigshop.com/David-2010-" }
ফিল্ড ভ্যালুকে প্যাটার্ন হিসেবে ব্যবহার করে কোয়ারী
$indexOfCP ব্যবহার করে websiteName-এ Name ফিল্ডের মান আছে কিনা চেক করা হয়েছে:
> db.demo88.aggregate([
... { "$match": {
... "$expr": {
... "$ne": [
... { "$indexOfCP": ["$websiteName", "$Name"] },
... -1
... ]
... }
... }}
... ]);
ফলাফল
{ "_id" : ObjectId("5e2c14c571bf0181ecc422b2"), "Name" : "David", "PassoutYear" : "2010", "websiteName" : "david.bigshop.com/David-2010-" }
ব্যাখ্যা:
- প্রথম ডকুমেন্ট: websiteName-এ "Chris" নেই (Carol আছে) → -১ রিটার্ন → বাদ
- দ্বিতীয় ডকুমেন্ট: websiteName-এ "David" আছে → পজিশন ০ বা অধিক → রিটার্ন
$indexOfCP vs $regex:
| ফিচার | $indexOfCP | $regex |
|---|---|---|
| পারফরম্যান্স | দ্রুত (ইনডেক্স ব্যবহার করতে পারে) | ধীর (সাধারণত ফুল স্ক্যান) |
| কেস সেনসিটিভ | হ্যাঁ | কনফিগারেবল (i অপশন) |
| ফিল্ড রেফারেন্স | সহজ (এক্সপ্রেশন) | কঠিন (জাভাস্ক্রিপ্ট ফাংশন লাগে) |
নোট: $indexOfCP ইউনিকোড কোড পয়েন্ট অনুযায়ী কাজ করে, $indexOfBytes বাইট অনুযায়ী। বাংলা/ইমোজির জন্য $indexOfCP সঠিক।