Group และ Sum ราคาสินค้าตาม Product ID ด้วย Aggregation
บทความนี้สาธิตการใช้ $group ใน Aggregation Pipeline เพื่อจัดกลุ่มเอกสารตาม Product_Id และคำนวณผลรวม ProductPrice ในแต่ละกลุ่ม
ขั้นตอนที่ 1: สร้าง Collection และเพิ่มข้อมูลตัวอย่าง
> db.aggreagateDemo.insertOne({"Product_Id":1,"ProductPrice":50});
{ "acknowledged": true, "insertedId": ObjectId("5e06d3c025ddae1f53b621d9") }
> db.aggreagateDemo.insertOne({"Product_Id":2,"ProductPrice":100});
{ "acknowledged": true, "insertedId": ObjectId("5e06d3c625ddae1f53b621da") }
> db.aggreagateDemo.insertOne({"Product_Id":2,"ProductPrice":500});
{ "acknowledged": true, "insertedId": ObjectId("5e06d3cb25ddae1f53b621db") }
> db.aggreagateDemo.insertOne({"Product_Id":1,"ProductPrice":150});
{ "acknowledged": true, "insertedId": ObjectId("5e06d3d125ddae1f53b621dc") }
ขั้นตอนที่ 2: แสดงข้อมูลทั้งหมด
> db.aggreagateDemo.find().pretty();
ผลลัพธ์: มี Product_Id 1 (2 รายการ), Product_Id 2 (2 รายการ)
ขั้นตอนที่ 3: Aggregation Pipeline Group และ Sum
> db.aggreagateDemo.aggregate([
{ $group: {
_id: "$Product_Id",
TotalValue: { $sum: "$ProductPrice" }
}}
]);
ผลลัพธ์ที่ได้
{ "_id": 2, "TotalValue": 600 }
{ "_id": 1, "TotalValue": 200 }
สรุป: $group กำหนด _id เป็นฟิลด์ที่ต้องการจัดกลุ่ม ($Product_Id) และใช้ Accumulator $sum คำนวณผลรวมของฟิลด์ตัวเลข ($ProductPrice) ในแต่ละกลุ่ม