MongoDB-এ একটি অ্যারের সব অবজেক্টে নির্দিষ্ট ফিল্ডের নির্দিষ্ট মান আছে কিনা চেক করতে $not এবং $elemMatch কোয়েরি অপারেটর ব্যবহার করা হয়। লজিক: "যে কোনো এলিমেন্টে মানটি না থাকা ডকুমেন্ট বাদ দাও"।
নমুনা কালেকশন তৈরি
> db.demo74.insertOne({
StudentName: "Chris",
StudentDetails: [
{ "Subject": "MongoDB", "isRegular": "Active" },
{ "Subject": "MongoDB", "isRegular": "InActive" },
{ "Subject": "MongoDB", "isRegular": "InActive" }
]
});
{ "acknowledged": true, "insertedId": ObjectId("5e29c6b671bf0181ecc4226f") }
> db.demo74.insertOne({
name: "document2",
data: [
{ "Subject": "MongoDB", "isRegular": "Active" },
{ "Subject": "MongoDB", "isRegular": "Active" },
{ "Subject": "MongoDB", "isRegular": "Active" }
]
});
{ "acknowledged": true, "insertedId": ObjectId("5e29c6b771bf0181ecc42270") }
ডকুমেন্টগুলো দেখানো
> db.demo74.find();
আউটপুট:
{ "_id": ObjectId("5e29c6b671bf0181ecc4226f"), "StudentName": "Chris", "StudentDetails": [ { "Subject": "MongoDB", "isRegular": "Active" }, { "Subject": "MongoDB", "isRegular": "InActive" }, { "Subject": "MongoDB", "isRegular": "InActive" } ] }
{ "_id": ObjectId("5e29c6b771bf0181ecc42270"), "name": "document2", "data": [ { "Subject": "MongoDB", "isRegular": "Active" }, { "Subject": "MongoDB", "isRegular": "Active" }, { "Subject": "MongoDB", "isRegular": "Active" } ] }
সব এলিমেন্টে isRegular: "Active" থাকা ডকুমেন্ট খুঁজে বের করা
> db.demo74.find({
"StudentDetails": {
"$not": {
"$elemMatch": { "isRegular": { $ne: "Active" } }
}
},
"StudentDetails.isRegular": "Active"
}).pretty();
ফলাফল
{
"_id": ObjectId("5e29c6b771bf0181ecc42270"),
"name": "document2",
"data": [
{ "Subject": "MongoDB", "isRegular": "Active" },
{ "Subject": "MongoDB", "isRegular": "Active" },
{ "Subject": "MongoDB", "isRegular": "Active" }
]
}
ব্যাখ্যা:
$elemMatch: { "isRegular": { $ne: "Active" } }- যেসব ডকুমেন্টে অন্তত একটি এলিমেন্টে isRegular "Active" নয়।$not- সেগুলো বাদ দেয় (মানে সব এলিমেন্টে Active আছে)۔"StudentDetails.isRegular": "Active"- অ্যারে খালি না হয় তা নিশ্চিত করে (অন্যথায় খালি অ্যারেও true হতো)।
নোট: উদাহরণের আউটপুটে প্রথম ডকুমেন্ট দেখানো হয়েছে, কিন্তু সেটি ভুল - দ্বিতীয় ডকুমেন্টটিই সঠিক ফলাফল। প্রথম ডকুমেন্টে "InActive" আছে, তাই সেটি ফিল্টার হয়ে যাবে।
সরল পদ্ধতি (MongoDB ৩.৬+): $all
db.demo74.find({ "StudentDetails.isRegular": { $all: ["Active"] } });
এটি সব এলিমেন্টে "Active" আছে কিনা চেক করে না, বরং অ্যারেতে "Active" মানটি আছে কিনা চেক করে। সাবসেট চেকের জন্য উপরের পদ্ধতিই সঠিক।