MongoDB-এ $where অপারেটর ব্যবহার করে জাভাস্ক্রিপ্ট এক্সপ্রেশন দিয়ে ফিল্ড তুলনা
$where অপারেটর দিয়ে জাভাস্ক্রিপ্ট এক্সপ্রেশন লিখে কোয়ারি করা যায়। এটি ফ্লেক্সিবল কিন্তু ধীর কারণ প্রতিটি ডকুমেন্টে জাভাস্ক্রিপ্ট エンজিন চালাতে হয়। দুটি ফিল্ডের মান তুলনা (কেস-ইনসেনসিটিভ) করার জন্য এটি ব্যবহার করা হয়েছে।
উদাহরণ: ডেটা ইনসার্ট
> db.demo7.insertOne({"FirstName1":"JOHN","FirstName2":"John"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e0ccd1a25ddae1f53b6222f") }
> db.demo7.insertOne({"FirstName1":"Carol","FirstName2":"Mike"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e0ccd2725ddae1f53b62230") }
> db.demo7.insertOne({"FirstName1":"bob","FirstName2":"BOB"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e0ccd3225ddae1f53b62231") }
সব ডকুমেন্ট দেখানো
> db.demo7.find();
আউটপুট:
{ "_id" : ObjectId("5e0ccd1a25ddae1f53b6222f"), "FirstName1" : "JOHN", "FirstName2" : "John" }
{ "_id" : ObjectId("5e0ccd2725ddae1f53b62230"), "FirstName1" : "Carol", "FirstName2" : "Mike" }
{ "_id" : ObjectId("5e0ccd3225ddae1f53b62231"), "FirstName1" : "bob", "FirstName2" : "BOB" }
$where কোয়ারি (FirstName1 ও FirstName2 কেস-ইনসেনসিটিভভাবে সমান)
> db.demo7.find({$where: "this.FirstName1.toLowerCase() == this.FirstName2.toLowerCase()"});
আউটপুট:
{ "_id" : ObjectId("5e0ccd1a25ddae1f53b6222f"), "FirstName1" : "JOHN", "FirstName2" : "John" }
{ "_id" : ObjectId("5e0ccd3225ddae1f53b62231"), "FirstName1" : "bob", "FirstName2" : "BOB" }
ব্যাখ্যা
this.FirstName1.toLowerCase() == this.FirstName2.toLowerCase()— জাভাস্ক্রিপ্ট এক্সপ্রেশন।thisবর্তমান ডকুমেন্টকে বোঝায়।- JOHN==John (true), bob==BOB (true), Carol==Mike (false)।
- পারফরম্যান্স সতর্কতা: $where কোয়ারি ইন্ডেক্স ব্যবহার করে না, কালেকশন স্ক্যান করে। বড় ডেটাসেটে এড়ান।
বিকল্প (MongoDB 4.2+): $expr ও $eq, $toLower অগ্রিগেশন এক্সপ্রেশন ব্যবহার করুন — এটি ইন্ডেক্স ব্যবহার করতে পারে এবং দ্রুত: find({$expr: {$eq: [{$toLower: "$FirstName1"}, {$toLower: "$FirstName2"}]}})।