Toán tử $sum trong stage $project của aggregate cho phép tính tổng các giá trị trong một mảng trường số.
Dữ liệu mẫu
> db.demo96.insertOne({
... "Name" : "Chris",
... "Details" : [
... { "Marks":67 },
... { "Marks":33 },
... { "Marks":50 }
... ]
... });
{ "acknowledged" : true, "insertedId" : ObjectId("5e2d6aadb8903cdd865577ad") }
Truy vấn aggregate tính tổng
> db.demo96.aggregate([
... { "$project": {
... "Name": 1,
... "TotalMarks": {
... "$sum": "$Details.Marks"
... }
... }}
... ]);
Kết quả
{ "_id" : ObjectId("5e2d6aadb8903cdd865577ad"), "Name" : "Chris", "TotalMarks" : 150 }
Giải thích:
"$Details.Marks": Trích xuất tất cả giá trị Marks từ mảng Details → mảng [67, 33, 50]$sum: Tự động cộng dồn tất cả phần tử trong mảng- Kết quả: 67 + 33 + 50 = 150
Lưu ý: $sum trong $project khác với $sum trong $group:
$project: Tổng của mảng trong mỗi document$group: Tổng của trường trên nhiều document (cần$unwindmảng trước)