MongoDB Aggregation Framework cung cấp toán tử $avg để tính giá trị trung bình của các trường số trong mảng. Kết hợp với $addFields, có thể thêm kết quả tính toán trở lại tài liệu gốc.
Tạo dữ liệu mẫu
> db.averageOfRatingsInArrayDemo.insertOne(
{
"StudentDetails":[
{ "StudentId":1, "StudentScore":45 },
{ "StudentId":2, "StudentScore":58 },
{ "StudentId":3, "StudentScore":67 }
]
}
);
{ "acknowledged" : true, "insertedId" : ObjectId("5cd427dc2cba06f46efe9ee4") }
Xem dữ liệu
> db.averageOfRatingsInArrayDemo.find().pretty();
Tính trung bình và thêm trường mới
Sử dụng
$addFieldsvới$avgtrên trườngStudentDetails.StudentScore:> db.averageOfRatingsInArrayDemo.aggregate([ {$addFields : {StudentScoreAverage : {$avg : "$StudentDetails.StudentScore"}}} ]);Kết quả
Giải thích
$addFields: Thêm trường mới vào tài liệu, giữ nguyên các trường hiện có$avg: Tính trung bình cộng của các giá trị số"$StudentDetails.StudentScore": Trích xuất tất cả giá trịStudentScoretừ mảngStudentDetails- MongoDB tự động duyệt qua mảng và tính trung bình
Các toán tử thống kê khác trong Aggregation
| Toán tử | Chức năng |
|---|---|
$sum | Tổng cộng |
$min | Giá trị nhỏ nhất |
$max | Giá trị lớn nhất |
$stdDevPop | Độ lệch chuẩn tổng thể |
$stdDevSamp | Độ lệch chuẩn mẫu |
Lưu ý
Pipeline aggregation không thay đổi dữ liệu gốc trong collection. Để lưu kết quả, sử dụng $merge hoặc $out stage, hoặc xử lý trong ứng dụng.