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

Truy vấn MongoDB tính trung bình với $avg

Toán tử $avg trong pipeline aggregate cho phép tính giá trị trung bình của một trường số, kể cả trường lồng nhau.

Tạo collection với trường lồng nhau

> db.demo80.insertOne({"Details":{"Price":10.5}});
{ "acknowledged" : true, "insertedId" : ObjectId("5e2bf43271bf0181ecc42297") }
> db.demo80.insertOne({"Details":{"Price":50.3}});
{ "acknowledged" : true, "insertedId" : ObjectId("5e2bf43871bf0181ecc42298") }
> db.demo80.insertOne({"Details":{"Price":100.10}});
{ "acknowledged" : true, "insertedId" : ObjectId("5e2bf43f71bf0181ecc42299") }

Truy vấn aggregate tính trung bình

Sử dụng $group với _id: null để gom toàn bộ collection, truy cập trường lồng bằng dot notation:

> db.demo80.aggregate([
... {
...     "$group": {
...         "_id": null,
...         "AvgValue": {
...             "$avg": "$Details.Price"
...         }
...     }
... }
... ]);

Kết quả

{ "_id" : null, "AvgValue" : 53.633333333333326 }

Giải thích:

  • "$Details.Price": Truy cập trường Price bên trong object Details
  • _id: null: Nhóm tất cả document thành một nhóm duy nhất
  • Kết quả: (10.5 + 50.3 + 100.1) / 3 = 53.633...

Có thể kết hợp với $match để lọc trước khi tính trung bình, hoặc $group theo trường khác (ví dụ theo category) để tính trung bình theo nhóm.