MongoDB এগ্রিগেশনে $project এবং $filter ব্যবহার করে অ্যারে-র শর্তানুসারী এলিমেন্ট প্রজেক্ট করা
MongoDB-এ একটি ডকুমেন্টের অ্যারে ফিল্ড থেকে নির্দিষ্ট শর্ত পূরণকারী এলিমেন্টগুলো মাত্র আউটপুটে দেখাতে (প্রজেক্ট করতে) এগ্রিগেশন পাইপলাইনে $project এবং $filter কম্বাইন করে ব্যবহার করা হয়।
১. কালেকশন ও নেস্টেড অ্যারে ডেটা তৈরি
> db.demo355.insertOne({"id":101,"details":[{"Name":"Chris",isMarried:1},{"Name":"David",isMarried:0},{"Name":"Mike",isMarried:1}]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e568928f8647eb59e5620c5") }
২. ডকুমেন্ট দেখানো
> db.demo355.find().pretty();
আউটপুট:
{ "_id" : ObjectId("5e568928f8647eb59e5620c5"), "id" : 101, "details" : [ { "Name" : "Chris", "isMarried" : 1 }, { "Name" : "David", "isMarried" : 0 }, { "Name" : "Mike", "isMarried" : 1 } ] }
৩. এগ্রিগেশন কোয়েরি: শুধু isMarried=1 (true) वाले এলিমেন্টগুলো প্রজেক্ট করা
> db.demo355.aggregate([
{ $project: {
details: { $filter: {
input: "$details",
as: "out",
cond: { $eq: ["$$out.isMarried", 1] }
}}
}}
])
স্টেজ ব্যাখ্যা:
$project- আউটপুট স্ট্রাকচার ডেফাইন করে।$filter-input: "$details"অ্যারে-র প্রতিটি এলিমেন্ট$$outভেরিয়েবলে নেয়।cond: {$eq: ["$$out.isMarried", 1]}- isMarried ফিল্ড ১ (true) হলে রাখে, ০ (false) হলে বাদ দেয়।
৪. ফলাফল
David (isMarried: 0) বাদ পড়েছে। Chris এবং Mike (isMarried: 1) বাকি থাকেছে। মূল ডকুমেন্ট ডাটাবেসে অপরিবর্তিত।