MongoDB-এ একাধিক ডকুমেন্টকে একটি নির্দিষ্ট ফিল্ড (যেমন id এবং Name) অনুযায়ী গ্রুপ করে, সম্পর্কিত ডেটা (যেমন CountryName) একটি অ্যারে হিসেবে সংগ্রহ করতে $group এবং $project স্টেজ ব্যবহার করা হয়।
উদাহরণ: কালেকশন ও ডেটা তৈরি
> db.demo540.insertOne({id:1,"Name":"Chris","CountryName":"US"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e8ca368ef4dcbee04fbbc0e") }
> db.demo540.insertOne({id:1,"Name":"Chris","CountryName":"UK"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e8ca36bef4dcbee04fbbc0f") }
> db.demo540.insertOne({id:1,"Name":"Chris","CountryName":"AUS"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e8ca370ef4dcbee04fbbc10") }
সব ডকুমেন্ট দেখানো
> db.demo540.find();
আউটপুট:
{ "_id" : ObjectId("5e8ca368ef4dcbee04fbbc0e"), "id" : 1, "Name" : "Chris", "CountryName" : "US" }
{ "_id" : ObjectId("5e8ca36bef4dcbee04fbbc0f"), "id" : 1, "Name" : "Chris", "CountryName" : "UK" }
{ "_id" : ObjectId("5e8ca370ef4dcbee04fbbc10"), "id" : 1, "Name" : "Chris", "CountryName" : "AUS" }
Aggregation কোয়েরি: id এবং Name অনুযায়ী গ্রুপ করে CountryName সংগ্রহ
> var query = [
{
"$group": {
"_id": {
"id": "$id",
"Name": "$Name"
},
"details": {
"$push": {
"CountryName": "$CountryName"
}
}
}
},
{
"$project": {
"_id": "$_id.id",
"Name": "$_id.Name",
"details": 1
}
}
];
> db.demo540.aggregate(query).pretty();
কোয়েরির ব্যাখ্যা
- $group স্টেজ:
idএবংNameফিল্ডগুলোকে কম্বাইন করে গ্রুপ কী (_id) তৈরি করে।$pushব্যবহার করে প্রতিটি গ্রুপেরCountryNameগুলো একটি অ্যারে (details)তে সংগ্রহ করে। - $project স্টেজ: আউটপুট ফরম্যাট করে।
_idঅবজেক্ট থেকেidএবংNameবের করে টপ-লেভেল ফিল্ড বানায়,detailsঅ্যারেটি রেখে দেয়।
আউটপুট
{
"details" : [
{ "Name" : "Chris", "CountryName" : "US" },
{ "Name" : "Chris", "CountryName" : "UK" },
{ "Name" : "Chris", "CountryName" : "AUS" }
],
"_id" : 1,
"Name" : "Chris"
}
মূল পয়েন্টসমূহ
$groupএ_idঅবজেক্ট হিসেবে একাধিক ফিল্ড কম্বাইন করা যায়।$pushগ্রুপের সব ডকুমেন্টের নির্দিষ্ট ফিল্ড একত্রিত করে অ্যারে বানায়।$projectআউটপুটের কাঠামো (structure) পরিবর্তন করতে ব্যবহৃত হয়।