MongoDB-এ একটি ডকুমেন্টের ভেতরের অ্যারে (array of documents) কে $unwind দিয়ে ফ্ল্যাটেন করে, তারপর $group দিয়ে নির্দিষ্ট ফিল্ড (যেমন Age) অনুযায়ী গ্রুপ করে কাউন্ট করা হয়।
উদাহরণ: কালেকশন ও ডেটা তৈরি
> db.demo559.insertOne({
details: [
{ Name: "Chris", Age: 21 },
{ Name: "Bob", Age: 22 },
{ Name: "Carol", Age: 21 },
{ Name: "Sam", Age: 21 }
]
});
{ "acknowledged" : true, "insertedId" : ObjectId("5e8f38d954b4472ed3e8e866") }
সব ডকুমেন্ট দেখানো
> db.demo559.find().pretty();
আউটপুট:
{
"_id" : ObjectId("5e8f38d954b4472ed3e8e866"),
"details" : [
{ "Name" : "Chris", "Age" : 21 },
{ "Name" : "Bob", "Age" : 22 },
{ "Name" : "Carol", "Age" : 21 },
{ "Name" : "Sam", "Age" : 21 }
]
}
Aggregation কোয়েরি: Age অনুযায়ী গ্রুপ করে কাউন্ট
> db.demo559.aggregate([
{ $unwind: "$details" },
{ $group: {
_id: "$details.Age",
Count: { $sum: 1 }
}},
{ $sort: { "_id": 1 } }
])
কোয়েরির ব্যাখ্যা
$unwind: "$details"—detailsঅ্যারেতে থাকা ৪টি সাবডকুমেন্টকে ৪টি আলাদা ডকুমেন্টে রূপান্তর করে।$group—details.Ageঅনুযায়ী গ্রুপ করে (_id: "$details.Age") এবং$sum: 1দিয়ে প্রতিটি এজ গ্রুপের কাউন্ট (Count) বের করে।$sort: { "_id": 1 }— এজ অনুযায়ী অ্যাসেন্ডিং সর্ট।
আউটপুট
{ "_id" : 21, "Count" : 3 }
{ "_id" : 22, "Count" : 1 }
Age ২১: ৩ জন (Chris, Carol, Sam), Age ২২: ১ জন (Bob)।
মূল পয়েন্টসমূহ
$unwindঅ্যারে অফ ডকুমেন্ট প্রসেস করার প্রথম ধাপ।$groupএ_idহিসেবে গ্রুপিং ফিল্ড (এখানে$details.Age) নির্দিষ্ট করুন।$sum: 1কাউন্ট করার সার্বিক প্যাটার্ন।- একাধিক ডকুমেন্ট থাকলে
$unwindসব ডকুমেন্টের অ্যারে ফ্ল্যাটেন করবে; গ্রুপিং সব মিলিয়ে হবে।