MongoDB-এ অ্যারেতে নেস্টেড ডকুমেন্টে একাধিক শর্ত একসাথে মেলাতে $elemMatch অপারেটর ব্যবহার করা হয়। এটি নিশ্চিত করে যে একই এলিমেন্টে সব শর্ত পূরণ হচ্ছে।
কলেকশন এবং ডকুমেন্ট তৈরি
> db.demo87.insertOne({
... id: 101,
... "Details": [
... { "EmployeeName": "Chris", "Salary": 45000 },
... { "EmployeeName": "David", "Salary": 50000 }
... ]
... });
{ "acknowledged" : true, "insertedId" : ObjectId("5e2c113871bf0181ecc422ab") }
> db.demo87.insertOne({
... id: 102,
... "Details": [
... { "EmployeeName": "Chris", "Salary": 65000 },
... { "EmployeeName": "Mike", "Salary": 100000 }
... ]
... });
{ "acknowledged" : true, "insertedId" : ObjectId("5e2c114371bf0181ecc422ac") }
সব ডকুমেন্ট দেখানো
> db.demo87.find();
আউটপুট:
{ "_id" : ObjectId("5e2c113871bf0181ecc422ab"), "id" : 101, "Details" : [ { "EmployeeName" : "Chris", "Salary" : 45000 }, { "EmployeeName" : "David", "Salary" : 50000 } ] }
{ "_id" : ObjectId("5e2c114371bf0181ecc422ac"), "id" : 102, "Details" : [ { "EmployeeName" : "Chris", "Salary" : 65000 }, { "EmployeeName" : "Mike", "Salary" : 100000 } ] }
একাধিক শর্তে ফিল্টার করার কোয়ারী
$elemMatch ব্যবহার করে EmployeeName: "Chris" এবং Salary: 65000 একই এলিমেন্টে আছে কিনা চেক করা হয়েছে:
> db.demo87.find({ Details: { $elemMatch: { "EmployeeName": 'Chris', "Salary": 65000 }}});
ফলাফল
{ "_id" : ObjectId("5e2c114371bf0181ecc422ac"), "id" : 102, "Details" : [ { "EmployeeName" : "Chris", "Salary" : 65000 }, { "EmployeeName" : "Mike", "Salary" : 100000 } ] }
ব্যাখ্যা:
- প্রথম ডকুমেন্ট: Chris আছে কিন্তু Salary ৪৫০০০ (৬৫০০০ নয়) → মেলেনি
- দ্বিতীয় ডকুমেন্ট: Chris আছে এবং Salary ৬৫০০০ → মেলেছে
$elemMatch ছাড়া কোয়ারী (ভুল পদ্ধতি):
db.demo87.find({ "Details.EmployeeName": "Chris", "Details.Salary": 65000 })
এটি ভুল ফলাফল দেবে! কারণ এটি আলাদা আলাদা এলিমেন্টে শর্ত চেক করে (Chris প্রথম এলিমেন্টে, 65000 দ্বিতীয় এলিমেন্টে থাকলেও মেলাবে)।
সারসংক্ষেপ: অ্যারে অবজেক্টে একাধিক শর্ত একই এলিমেন্টে মেলাতে হলে অবশ্যই $elemMatch ব্যবহার করুন।