เพื่อหาผลรวมของเอกสารเฉพาะ ให้ใช้ $sum ร่วมกับ $group และ $match ใน MongoDB Aggregation
สร้างคอลเลกชันพร้อมเอกสารที่มีอาร์เรย์ UsersDetails (มี FirstUser และ TotalLikes):
> db.calculateSumOfDocument.insertOne({"ListOfUsers":["Carol","Bob"],"UsersDetails":[{"FirstUser":"Carol","TotalLikes":20},{"FirstUser":"Bob","TotalLikes":45}]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e084e9125ddae1f53b6220c") }
> db.calculateSumOfDocument.insertOne({"ListOfUsers":["Carol","Bob"],"UsersDetails":[{"FirstUser":"Carol","TotalLikes":60},{"FirstUser":"Bob","TotalLikes":50}]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e084f6125ddae1f53b6220d") }
แสดงเอกสารทั้งหมด:
> db.calculateSumOfDocument.find().pretty();
ผลลัพธ์ - 2 เอกสาร แต่ละอันมี UsersDetails 2 รายการ (Carol และ Bob):
คำสั่ง Aggregation: $match กรองเฉพาะ Carol, $unwind แยก UsersDetails, $match อีกครั้ง, $group คำนวณ $sum ของ TotalLikes:
> db.calculateSumOfDocument.aggregate([ ... { "$match": { "UsersDetails.FirstUser": "Carol" } }, ... { "$unwind" : "$UsersDetails" }, ... { "$match": { "UsersDetails.FirstUser": "Carol" } }, ... { "$group": { ... "_id": null, ... "total": { "$sum": "$UsersDetails.TotalLikes" } ... } } ... ]);ผลลัพธ์ - ผลรวม TotalLikes ของ Carol ทั้งสองเอกสาร = 20 + 60 = 80: