MongoDB-এ অ্যারেতে নেস্ট করা অবজেক্টগুলোর মধ্যে একাধিক শর্ত মিলিয়ে কোয়ারি করতে aggregate() পাইপলাইনের $match স্টেজে $elemMatch অপারেটর ব্যবহার করা হয়।
কলেকশন এবং ডকুমেন্ট তৈরি
> db.demo84.insertOne({
... "EmployeeDetails": [
... {Name: 'John', Salary:45000, isMarried: true},
... {Name: 'Chris', Salary:50000, isMarried: false}
... ]
... });
{ "acknowledged" : true, "insertedId" : ObjectId("5e2c0a3471bf0181ecc422a5") }
> db.demo84.insertOne({
... "EmployeeDetails": [
... {Name: 'Sam', Salary:56000, isMarried: false},
... {Name: 'Bob', Salary:50000, isMarried: false}
... ]
... });
{ "acknowledged" : true, "insertedId" : ObjectId("5e2c0a4071bf0181ecc422a6") }
সব ডকুমেন্ট দেখানো
> db.demo84.find();
আউটপুট:
{ "_id" : ObjectId("5e2c0a3471bf0181ecc422a5"), "EmployeeDetails" : [ { "Name" : "John", "Salary" : 45000, "isMarried" : true }, { "Name" : "Chris", "Salary" : 50000, "isMarried" : false } ] }
{ "_id" : ObjectId("5e2c0a4071bf0181ecc422a6"), "EmployeeDetails" : [ { "Name" : "Sam", "Salary" : 56000, "isMarried" : false }, { "Name" : "Bob", "Salary" : 50000, "isMarried" : false } ] }
একাধিক শর্ত মিলিয়ে কোয়ারি
$elemMatch ব্যবহার করে একই অ্যারে এলিমেন্টে Name: "Chris" এবং isMarried: false দুটি শর্ত মিলানো হয়েছে:
> db.demo84.aggregate([
... {
... "$match": {
... "EmployeeDetails": {
... "$elemMatch": {
... "Name": "Chris",
... "isMarried": false
... }
... }
... }
... }
... ]);
ফলাফল
{ "_id" : ObjectId("5e2c0a3471bf0181ecc422a5"), "EmployeeDetails" : [ { "Name" : "John", "Salary" : 45000, "isMarried" : true }, { "Name" : "Chris", "Salary" : 50000, "isMarried" : false } ] }
ব্যাখ্যা: শুধু প্রথম ডকুমেন্ট রিটার্ন হয়েছে কারণ সেটাতে EmployeeDetails অ্যারেতে একই এলিমেন্টে "Chris" নাম এবং isMarried: false উভয়ই পাওয়া যায়। দ্বিতীয় ডকুমেন্টে "Chris" নাম নেই।
গুরুত্বপূর্ণ: $elemMatch নিশ্চিত করে যে একই অ্যারে এলিমেন্টে সব শর্ত পূরণ হচ্ছে, আলাদা এলিমেন্টে নয়।