Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MongoDB

MongoDB: รวมค่า (Sum) ของฟิลด์เฉพาะด้วย Aggregate

ใช้ $match กรองเอกสาร แล้วตามด้วย $group และ $sum เพื่อรวมค่าของฟิลด์เฉพาะ สร้างคอลเลกชันตัวอย่าง:

> db.demo329.insertOne({"Name":"Chris","Age":21,"Marks":45});
{ "acknowledged" : true, "insertedId" : ObjectId("5e516f28f8647eb59e56207d") }
> db.demo329.insertOne({"Name":"David","Age":21,"Marks":56});
{ "acknowledged" : true, "insertedId" : ObjectId("5e516f28f8647eb59e56207e") }
> db.demo329.insertOne({"Name":"Mike","Age":21,"Marks":78});
{ "acknowledged" : true, "insertedId" : ObjectId("5e516f29f8647eb59e56207f") }
> db.demo329.insertOne({"Name":"David","Age":21,"Marks":89});
{ "acknowledged" : true, "insertedId" : ObjectId("5e516f29f8647eb59e562080") }

แสดงข้อมูล:

> db.demo329.find().pretty();

คิวรีรวม Marks ของคนชื่อ David อายุ 21:

> db.demo329.aggregate([
  { $match: { $and: [ {'Name': 'David'}, {Age:21} ] } },
  { $group: { _id: null, TotalMarks: { $sum: "$Marks" } } }
])

ผลลัพธ์ (56 + 89 = 145):

{ "_id" : null, "TotalMarks" : 145 }

คำอธิบาย Pipeline

  • $match: กรองเอกสารก่อนเข้า pipeline (ใช้ index ได้)
  • $group: จัดกลุ่มเอกสาร _id: null หมายถึงรวมทั้งหมดเป็นกลุ่มเดียว
  • $sum: "$Marks": รวมค่าฟิลด์ Marks (เครื่องหมาย $ นำหน้าชื่อฟิลด์)
  • สามารถเพิ่ม $sort, $limit ได้ตามต้องการ