MongoDB Aggregation Pipeline-এ $unwind, $match, এবং $project স্টেজ ব্যবহার করে একটি ডকুমেন্টের ভেতরের অ্যারে থেকে নির্দিষ্ট ফিল্ড মান (যেমন Age: 21) অনুযায়ী সাবডকুমেন্ট বের করা হয়।
উদাহরণ: কালেকশন ও ডেটা তৈরি
> db.demo685.insertOne({
"details": [
{ Name: "Chris", Age: 21 },
{ Name: "David", Age: 23 },
{ Name: "Bob", Age: 21 }
]
});
{ "acknowledged" : true, "insertedId" : ObjectId("5ea54f6fa7e81adc6a0b395b") }
সব ডকুমেন্ট দেখানো
> db.demo685.find();
আউটপুট:
{ "_id" : ObjectId("5ea54f6fa7e81adc6a0b395b"), "details" : [
{ "Name" : "Chris", "Age" : 21 },
{ "Name" : "David", "Age" : 23 },
{ "Name" : "Bob", "Age" : 21 }
] }
Aggregation কোয়েরি: Age = 21 वाले সাবডকুমেন্ট বের করা
> db.demo685.aggregate([
{ $unwind: "$details" },
{ $match: { "details.Age": 21 } },
{ $project: { _id: 0 } }
]).pretty();
কোয়েরির ব্যাখ্যা
$unwind: "$details"—detailsঅ্যারেতে থাকা ৩টি সাবডকুমেন্টকে ৩টি আলাদা ডকুমেন্টে রূপান্তর করে।$match: { "details.Age": 21 }—Age: 21वाले সাবডকুমেন্টগুলো ফিল্টার করে।$project: { _id: 0 }—_idফিল্ড বাদ দেয় (শুধুdetailsঅবজেক্ট দেখাবে)।
আউটপুট
{ "details" : { "Name" : "Chris", "Age" : 21 } }
{ "details" : { "Name" : "Bob", "Age" : 21 } }
মূল পয়েন্টসমূহ
$unwindঅ্যারে ডিকনস্ট্রাক্ট করার জন্য আবশ্যক।$matchএগরিগেশন পাইপলাইনের মাঝপথে ব্যবহার করা যায় (ফিল্টার করার জন্য)।$project: { _id: 0 }আউটপুট থেকে_idবাদ দেয়।- আউটপুটে প্রতিটি সাবডকুমেন্ট আলাদা ডকুমেন্ট হিসেবে আসে (অ্যারে নয়)।
- অরিজিনাল ডকুমেন্টের _id রাখতে চাইলে
$project: { _id: 1, details: 1 }ব্যবহার করুন।