MongoDB-এ একাধিক ডকুমেন্টকে একটি নির্দিষ্ট ফিল্ড (যেমন id) দিয়ে গ্রুপ করে একটি সিঙ্গেল ডকুমেন্টে রূপান্তর করতে, যেখানে গ্রুপ করা ডকুমেন্টগুলো একটি অ্যারেতে থাকে, অ্যাগ্রিগেশন পাইপলাইনে $group এবং $push ব্যবহার করা হয়।
নমুনা কালেকশন তৈরি
> db.demo248.insertOne({ "id": 101, "Name": "Chris", "Age": 21, "CountryName": "US" });
{ "acknowledged": true, "insertedId": ObjectId("5e46b6651627c0c63e7dba6d") }
> db.demo248.insertOne({ "id": 101, "Name": "Bob", "Age": 22, "CountryName": "UK" });
{ "acknowledged": true, "insertedId": ObjectId("5e46b6741627c0c63e7dba6e") }
> db.demo248.insertOne({ "id": 102, "Name": "Mike", "Age": 20, "CountryName": "AUS" });
{ "acknowledged": true, "insertedId": ObjectId("5e46b6811627c0c63e7dba6f") }
ডকুমেন্টগুলো দেখানো
> db.demo248.find();
আউটপুট:
{ "_id": ObjectId("5e46b6651627c0c63e7dba6d"), "id": 101, "Name": "Chris", "Age": 21, "CountryName": "US" }
{ "_id": ObjectId("5e46b6741627c0c63e7dba6e"), "id": 101, "Name": "Bob", "Age": 22, "CountryName": "UK" }
{ "_id": ObjectId("5e46b6811627c0c63e7dba6f"), "id": 102, "Name": "Mike", "Age": 20, "CountryName": "AUS" }
একাধিক ডকুমেন্টকে অ্যারে সহ একক ডকুমেন্টে কনভার্ট
> db.demo248.aggregate([
{
$group: {
_id: "$id",
details: {
$push: {
id: "$id",
Name: "$Name",
Age: "$Age",
CountryName: "$CountryName"
}
}
}
}
]);
ফলাফল
{ "_id": 102, "details": [ { "id": 102, "Name": "Mike", "Age": 20, "CountryName": "AUS" } ] }
{ "_id": 101, "details": [
{ "id": 101, "Name": "Chris", "Age": 21, "CountryName": "US" },
{ "id": 101, "Name": "Bob", "Age": 22, "CountryName": "UK" }
] }
ব্যাখ্যা:
$group: { _id: "$id" }-idফিল্ড দিয়ে গ্রুপিং (১০১ এবং ১০২ - দুটি গ্রুপ)।$push- প্রতিটি গ্রুপের ডকুমেন্টগুলোকে একটি অ্যারেতে (details) পুশ করে।$push-এর ভেতর অবজেক্ট কনস্ট্রাক্ট করে নির্দিষ্ট ফিল্ডগুলো অন্তর্ভুক্ত করা হয়েছে।- আউটপুটে প্রতিটি গ্রুপের জন্য একটি ডকুমেন্ট, যার মধ্যে
detailsঅ্যারেতে ওই গ্রুপের সব ডকুমেন্ট।
আউটপুট ফরম্যাট কাস্টোমাইজেশন
db.demo248.aggregate([
{ $group: { _id: "$id", details: { $push: "$$ROOT" } } },
{ $project: { _id: 0, id: "$_id", details: 1 } }
]);
$$ROOT পুরো ডকুমেন্টকে পুশ করে (শুধু নির্দিষ্ট ফিল্ড না)। $project দিয়ে _id কে id নামে রিনেম করা হয়েছে।
ব্যবহারিক উদাহفى: অর্ডার গ্রুপিং
কাস্টমার আইডি অনুযায়ী সব অর্ডার একসাথে দেখাতে এই প্যাটার্ন ব্যবহার করা হয়।