MongoDB-এ একই ডকুমেন্টের একাধিক ফিল্ড বা অ্যারে এলিমেন্ট পারস্পরিকভাবে তুলনা করতে $where অপারেটর ব্যবহার করুন।
উদাহরণ
একটি ডকুমেন্ট তৈরি করুন:
> db.comparingMultiplePropertiesDemo.insertOne({"Values":[10,70,60]});
{ "acknowledged" : true, "insertedId" : ObjectId("5cf228fcb64a577be5a2bc0a") }
ডকুমেন্টটি দেখুন:
> db.comparingMultiplePropertiesDemo.find().pretty();
আউটপুট:
{ "_id" : ObjectId("5cf228fcb64a577be5a2bc0a"), "Values" : [ 10, 70, 60 ] }
কেস ১: শর্ত সত্য হলে (Values[1] > Values[2])
> db.comparingMultiplePropertiesDemo.find({ $where: "this.Values[1] > this.Values[2]" });
আউটপুট:
{ "_id" : ObjectId("5cf228fcb64a577be5a2bc0a"), "Values" : [ 10, 70, 60 ] }
কারণ ৭০ > ৬০ সত্য।
কেস ২: শর্ত মিথ্যা হলে (Values[1] < Values[2])
> db.comparingMultiplePropertiesDemo.find({ $where: "this.Values[1] < this.Values[2]" });
আউটপুট: কোনো ডকুমেন্ট ফেরত আসে না, কারণ ৭০ < ৬০ মিথ্যা।
ব্যাখ্যা:
$whereজাভাস্ক্রিপ্ট এক্সপ্রেশন 評価 করে।thisবর্তমান ডকুমেন্টকে রেফার করে।- অ্যারে ইনডেক্স ০-ভিত্তিক:
Values[0]=১০,Values[1]=৭০,Values[2]=৬০।
সতর্কতা: $where ধীর গতির, বড় ডেটাসেটে এগ্রিগেশন পাইপলাইন ($expr, $gt ইত্যাদি) ব্যবহার করুন।
আধুনিক বিকল্প (MongoDB ৩.৬+): $expr
db.comparingMultiplePropertiesDemo.find({
$expr: { $gt: [ { $arrayElemAt: ["$Values", 1] }, { $arrayElemAt: ["$Values", 2] } ] }
});