MongoDB-এ অ্যারেতে একাধিক শর্ত (যেমন: একটি এলিমেন্ট ৭৭-৭৮ এর মধ্যে, অন্যটি ৯০-১১০ এর মধ্যে, এবং তৃতীয় এলিমেন্ট নেই) পূরণ করা ডকুমেন্ট বের করতে $elemMatch এবং $and ব্যবহার করুন।
উদাহরণ
দুটি ডকুমেন্ট তৈরি করুন:
> db.findDocumentsHaving2Demo.insertOne({ _id: 101, Values: [78, 98] });
{ "acknowledged" : true, "insertedId" : 101 }
> db.findDocumentsHaving2Demo.insertOne({ _id: 102, Values: [89, 102] });
{ "acknowledged" : true, "insertedId" : 102 }
সকল ডকুমেন্ট দেখুন:
> db.findDocumentsHaving2Demo.find().pretty();
আউটপুট:
{ "_id" : 101, "Values" : [ 78, 98 ] }
{ "_id" : 102, "Values" : [ 89, 102 ] }
শর্ত: ১) ৭৭-৭৮ রেঞ্জে একটি মান, ২) ৯০-১১০ রেঞ্জে একটি মান, ৩) ৩য় এলিমেন্ট নেই
> db.findDocumentsHaving2Demo.find({
$and: [
{ Values: { $elemMatch: { $gte: 77, $lte: 78 } } },
{ Values: { $elemMatch: { $gte: 90, $lte: 110 } } },
{ 'Values.2': { $exists: false } }
]
});
আউটপুট:
{ "_id" : 101, "Values" : [ 78, 98 ] }
ব্যাখ্যা:
Values.2— ০-ভিত্তিক ইনডেক্স, অর্থাৎ ৩য় এলিমেন্ট।$exists: falseমানে ৩য় এলিমেন্ট নেই।$elemMatch— প্রতিটি শর্ত আলাদা এলিমেন্টে পূরণ হতে পারে (এখানে ৭৮ এবং ৯৮ আলাদা এলিমেন্ট)।$and— তিনটি শর্ত একসাথে পূরণ করতে হবে।
কেন _id: 102 বাদ পড়েছে?
- প্রথম শর্ত: ৮৯ ৭৭-৭৮ রেঞ্জে নয়।
- দ্বিতীয় শর্ত: ১০২ ৯০-১১০ রেঞ্জে আছে।
- তবে প্রথম শর্ত পূরণ হয়নি।
নোট: যদি একই এলিমেন্টে একাধিক শর্ত পূরণ করতে হয়, তবে একই $elemMatch অবজেক্টে সব শর্ত দিন।