Tính tổng điểm học sinh bằng MongoDB Aggregation
Sử dụng aggregate() kết hợp với toán tử $sum để tính tổng điểm của một học sinh cụ thể.
1. Tạo collection điểm số
> db.demo434.insertOne({ "Name": "Chris", "Score": 45 });
{ "acknowledged": true, "insertedId": ObjectId("5e771603bbc41e36cc3cae93") }
> db.demo434.insertOne({ "Name": "David", "Score": 55 });
{ "acknowledged": true, "insertedId": ObjectId("5e77161abbc41e36cc3cae94") }
> db.demo434.insertOne({ "Name": "Chris", "Score": 55 });
{ "acknowledged": true, "insertedId": ObjectId("5e771624bbc41e36cc3cae95") }
2. Xem tất cả tài liệu
> db.demo434.find();
Kết quả:
{ "_id": ObjectId("5e771603bbc41e36cc3cae93"), "Name": "Chris", "Score": 45 }
{ "_id": ObjectId("5e77161abbc41e36cc3cae94"), "Name": "David", "Score": 55 }
{ "_id": ObjectId("5e771624bbc41e36cc3cae95"), "Name": "Chris", "Score": 55 }
3. Truy vấn tổng điểm của Chris
> db.demo434.aggregate([
{ "$match": { "Name": "Chris" } },
{ "$group": { "_id": null, "TotalScore": { "$sum": "$Score" } } }
]);
4. Kết quả
{ "_id": null, "TotalScore": 100 }
Giải thích
- $match: Lọc chỉ lấy tài liệu có Name = "Chris"
- $group: Gộp tất cả tài liệu đã lọc (null _id = gộp tất cả), tính tổng trường Score
Mẹo: Thay null bằng "$Name" nếu muốn xem tổng điểm của tất cả học sinh cùng lúc.