Để tính tổng giá trị của một trường trên tất cả tài liệu, sử dụng aggregation $group với $sum. Tạo collection:
> db.demo677.insertOne({Value:10});
{ "acknowledged" : true, "insertedId" : ObjectId("5ea421f404263e90dac943f8") }
> db.demo677.insertOne({Value:50});
{ "acknowledged" : true, "insertedId" : ObjectId("5ea421f704263e90dac943f9") }
> db.demo677.insertOne({Value:20});
{ "acknowledged" : true, "insertedId" : ObjectId("5ea421fa04263e90dac943fa") }
> db.demo677.insertOne({Value:20});
{ "acknowledged" : true, "insertedId" : ObjectId("5ea421fe04263e90dac943fb") }
Hiển thị dữ liệu (Value: 10, 50, 20, 20):
> db.demo677.find();
Kết quả:
Aggregation nhóm tất cả (_id: null) và tính tổng Value:
> db.demo677.aggregate({ $group: { _id: null, sum: { $sum: "$Value" } } });Kết quả tổng = 100:
Giải thích:
_id: nullgom tất cả document thành 1 nhóm.$sum: "$Value"cộng dồn giá trị trường Value. Tương tự SQL:SELECT SUM(Value) FROM demo677.Mở rộng:
- Tổng có điều kiện:
{ $match: { Value: { $gt: 15 } }, $group: { _id: null, sum: { $sum: "$Value" } } }→ 50+20+20=90 - Tổng theo nhóm:
{ $group: { _id: "$Category", total: { $sum: "$Value" } } } - Dùng
$toDecimalcho độ chính xác cao (MongoDB 4.0+)