MongoDB-এ aggregate() এর মধ্যে $group ব্যবহার করে স্ট্রাকচার্ড গ্রুপিং করা যায়। $group নির্দিষ্ট _id এক্সপ্রেশন দিয়ে ডকুমেন্টগুলো গ্রুপ করে এবং প্রতিটি গ্রুপের জন্য একটি ডকুমেন্ট আউটপুট করে।
ডেটা ইনসার্ট:
> db.demo534.insertOne({_id:10,"ProductId":100,"ProductName":"Product-1"});
{ "acknowledged" : true, "insertedId" : 10 }
> db.demo534.insertOne({_id:11,"ProductId":100,"ProductName":"Product-2"});
{ "acknowledged" : true, "insertedId" : 11 }
> db.demo534.insertOne({_id:12,"ProductId":101,"ProductName":"Product-1"});
{ "acknowledged" : true, "insertedId" : 12 }
সকল ডকুমেন্ট:
> db.demo534.find();
আউটপুট:
{ "_id" : 10, "ProductId" : 100, "ProductName" : "Product-1" }
{ "_id" : 11, "ProductId" : 100, "ProductName" : "Product-2" }
{ "_id" : 12, "ProductId" : 101, "ProductName" : "Product-1" }
স্ট্রাকচার্ড গ্রুপিং কোয়েরি (দুই স্তরে গ্রুপিং):
> db.demo534.aggregate(
... {
... $group: {
... _id: { productName: "$ProductName", productId: "$ProductId" },
... count: { $sum: 1 }
... }
... },
... {
... $group: {
... _id: "$_id.productId",
... itemCounts: { $push: { productName: "$_id.productName", count: "$count" } }
... }
... })
আউটপুট:
{ "_id" : 101, "itemCounts" : [ { "productName" : "Product-1", "count" : 1 } ] }
{ "_id" : 101, "itemCounts" : [ { "productName" : "Product-2", "count" : 1 }, { "productName" : "Product-1", "count" : 1 } ] }
ব্যাখ্যা
- প্রথম
$group:ProductNameএবংProductIdকাম্বিনেশন দিয়ে গ্রুপ করে কাউন্ট করে। - দ্বিতীয়
$group:productIdদিয়ে আবার গ্রুপ করে এবং$pushদিয়ে প্রতিটি প্রোডাক্টের নাম ও কাউন্ট একটি অ্যারে (itemCounts) তে সংগ্রহ করে। - ফলাফলে প্রতিটি
ProductId-র নিচে তার সব প্রোডাক্ট নাম ও কাউন্ট থাকে।