MongoDB অ্যাগ্রিগেশন-এ একটি অ্যারে অন্য অ্যারের সাবসেট কিনা চেক করতে $setIsSubset অপারেটর ব্যবহার করা হয়। এটি বুলিয়ান ভ্যালু রিটার্ন করে।
সিনট্যাক্স
{ $setIsSubset: [ , ] }
array1 এর সব এলিমেন্ট array2-তে থাকলে true, অন্যথায় false রিটার্ন করে।
নমুনা কালেকশন তৈরি
> db.subsetDemo.insertOne({ "StudentName": "Chris", "StudentFavouriteSubject": ["Java", "Python"] });
{ "acknowledged": true, "insertedId": ObjectId("5e063e49150ee0e76c06a052") }
> db.subsetDemo.insertOne({ "StudentName": "Chris", "StudentFavouriteSubject": ["Java", "Python", "MySQL"] });
{ "acknowledged": true, "insertedId": ObjectId("5e063e4f150ee0e76c06a053") }
ডকুমেন্টগুলো দেখানো
> db.subsetDemo.find().pretty();
আউটপুট:
{ "_id": ObjectId("5e063e49150ee0e76c06a052"), "StudentName": "Chris", "StudentFavouriteSubject": [ "Java", "Python" ] }
{ "_id": ObjectId("5e063e4f150ee0e76c06a053"), "StudentName": "Chris", "StudentFavouriteSubject": [ "Java", "Python", "MySQL" ] }
সাবসেট শর্ত প্রয়োগ (MySQL আছে কিনা)
> db.subsetDemo.aggregate([
{
$project: {
_id: 0,
StudentName: 1,
isMySQL: {
$setIsSubset: [ ["MySQL"], "$StudentFavouriteSubject" ]
}
}
}
]);
ফলাফল
{ "StudentName": "Chris", "isMySQL": false }
{ "StudentName": "Chris", "isMySQL": true }
ব্যাখ্যা:
- প্রথম ডকুমেন্টে
["Java", "Python"]- এখানে "MySQL" নেই, তাইfalse। - দ্বিতীয় ডকুমেন্টে
["Java", "Python", "MySQL"]- এখানে "MySQL" আছে, তাইtrue। $setIsSubsetএর প্রথম আর্গুমেন্টটি সাবসেট অ্যারে (যে মানগুলো খুঁজছি), দ্বিতীয় আর্গুমেন্টটি সুপারসেট অ্যারে (যেখানে খুঁজছি)।
ব্যবহারিক উদাহরণ: ফিল্টারিং
db.subsetDemo.aggregate([
{ $match: { $expr: { $setIsSubset: [ ["MySQL"], "$StudentFavouriteSubject" ] } } },
{ $project: { StudentName: 1, StudentFavouriteSubject: 1 } }
]);
এটি শুধু "MySQL" থাকা ডকুমেন্টগুলো ফিল্টার করে দেবে।