MongoDB-এ $addFields এবং $filter ব্যবহার করে শর্ত পূরণকারী সাব-ডকুমেন্টগুলো রেখে বাকি বাদ দেওয়া
MongoDB-এ একটি ডকুমেন্টের ভেতরের অ্যারে থেকে নির্দিষ্ট শর্ত (যেমন Score >= 70) পূরণকারী এলিমেন্টগুলো মাত্র রেখে বাকি বাদ দিতে এগ্রিগেশন পাইপলাইনে $addFields এবং $filter ব্যবহার করা হয়।
১. কালেকশন ও নেস্টেড ডেটা তৈরি
> db.demo334.insertOne({
"Name": "Chris",
"Age": 21,
"details": [
{ "Subject": "MySQL", "Score": 78 },
{ "Subject": "MongoDB", "Score": 45 }
]
});
{ "acknowledged" : true, "insertedId" : ObjectId("5e52241bf8647eb59e562090") }
২. ডকুমেন্ট দেখানো
> db.demo334.find().pretty();
আউটপুট:
{
"_id" : ObjectId("5e52241bf8647eb59e562090"),
"Name" : "Chris",
"Age" : 21,
"details" : [
{ "Subject" : "MySQL", "Score" : 78 },
{ "Subject" : "MongoDB", "Score" : 45 }
]
}
৩. এগ্রিগেশন কোয়েরি: Score >= 70 থাকা ডিটেইলস মাত্র রাখা
> db.demo334.aggregate([
{ $addFields: {
details: { $filter: {
input: '$details',
as: 'out',
cond: { $gte: ['$$out.Score', 70] }
}}
}}
])
ব্যাখ্যা:
$addFields- নতুন ফিল্ড যোগ করে বা বিদ্যমান ফিল্ড আপডেট করে।$filter-input: '$details'অ্যারে-র প্রতিটি এলিমেন্ট ($$out) চেক করে।cond: {$gte: ['$$out.Score', 70]}- Score ৭০ বা তার বেশি হলে রাখে।
৪. ফলাফল
{ "_id" : ObjectId("5e52241bf8647eb59e562090"), "Name" : "Chris", "Age" : 21, "details" : [ { "Subject" : "MySQL", "Score" : 78 } ] }
MongoDB-এর ৪৫ নম্বর বাদ পড়েছে, শুধু MySQL (৭৮ নম্বর) বাকি থাকেছে। মূল ডকুমেন্ট ডাটাবেসে পরিবর্তিত হয়নি, শুধু আউটপুটে ফিল্টার হয়েছে।