ใช้ $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ได้ตามต้องการ