Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

Tính trung bình điểm trong mảng và thêm trường vào tài liệu gốc trong MongoDB

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 $addFields với $avg trên trường StudentDetails.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ị StudentScore từ mảng StudentDetails
  • 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
$sumTổng cộng
$minGiá trị nhỏ nhất
$maxGiá 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.