การใช้ $sum ใน Aggregate Pipeline
เพื่อคำนวณผลรวมคะแนนของนักเรียนคนเฉพาะ ใช้ $match กรองข้อมูลก่อน แล้วค่อย $group พร้อม $sum
ตัวอย่างข้อมูล
> db.demo434.insertOne({ "Name": "Chris", "Score": 45 });
> db.demo434.insertOne({ "Name": "David", "Score": 55 });
> db.demo434.insertOne({ "Name": "Chris", "Score": 55 });
แสดงข้อมูลทั้งหมด
> db.demo434.find();
ผลลัพธ์:
{ "_id": ObjectId(...), "Name": "Chris", "Score": 45 }
{ "_id": ObjectId(...), "Name": "David", "Score": 55 }
{ "_id": ObjectId(...), "Name": "Chris", "Score": 55 }
Query คำนวณผลรวมคะแนนของ Chris
> db.demo434.aggregate([
{ "$match": { "Name": "Chris" } },
{ "$group": { "_id": null, "TotalScore": { "$sum": "$Score" } } }
]);
ผลลัพธ์
{ "_id": null, "TotalScore": 100 }
คำอธิบาย
- $match - กรองเอกสารเฉพาะชื่อ "Chris" ก่อนการคำนวณ
- $group - จัดกลุ่มทั้งหมด (_id: null) และคำนวณผลรวมด้วย $sum
- วิธีนี้มีประสิทธิภาพมากกว่าการดึงข้อมูลมาคำนวณในแอปพลิเคชัน