Để tính tổng, sử dụng $sum và nhóm tài liệu bằng $group trong aggregation pipeline.
Tạo collection với mảng UsersDetails chứa 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") }
Hiển thị dữ liệu (2 tài liệu, mỗi tài liệu có 2 user Carol và Bob):
> db.calculateSumOfDocument.find().pretty();
Pipeline: $match lọc Carol, $unwind mảng UsersDetails, $match lại Carol, $group tính tổng TotalLikes:
> db.calculateSumOfDocument.aggregate([ ... { "$match": { "UsersDetails.FirstUser": "Carol" } }, ... { "$unwind" : "$UsersDetails" }, ... { "$match": { "UsersDetails.FirstUser": "Carol" } }, ... { "$group": { ... "_id": null, ... "total": { "$sum": "$UsersDetails.TotalLikes" } ... }} ...]);Kết quả tổng TotalLikes của Carol: 20 + 60 = 80: