Sử dụng aggregate() để tính trung bình với $avg, sau đó dùng find() với $gt để lọc các tài liệu lớn hơn trung bình.
Tạo collection:
> db.demo552.insertOne({values:10});
{ "acknowledged" : true, "insertedId" : ObjectId("5e8e3b1c9e5f92834d7f05ea") }
> db.demo552.insertOne({values:50});
{ "acknowledged" : true, "insertedId" : ObjectId("5e8e3b1f9e5f92834d7f05eb") }
> db.demo552.insertOne({values:40});
{ "acknowledged" : true, "insertedId" : ObjectId("5e8e3b289e5f92834d7f05ec") }
Hiển thị tất cả:
> db.demo552.find();
Kết quả (10, 50, 40):
{ "_id" : ObjectId("5e8e3b1c9e5f92834d7f05ea"), "values" : 10 }
{ "_id" : ObjectId("5e8e3b1f9e5f92834d7f05eb"), "values" : 50 }
{ "_id" : ObjectId("5e8e3b289e5f92834d7f05ec"), "values" : 40 }
Bước 1: Tính trung bình qua aggregate:
> var findAvg = db.demo552.aggregate([
... { "$group": { "_id": "null", Average: { "$avg": "$values"} }}
... ]).toArray()[0]["Average"];
Bước 2: Lọc tài liệu values > trung bình (trung bình = 33.33):
> db.demo552.find({ "values": { "$gt": findAvg } })
Kết quả (50 và 40):
{ "_id" : ObjectId("5e8e3b1f9e5f92834d7f05eb"), "values" : 50 }
{ "_id" : ObjectId("5e8e3b289e5f92834d7f05ec"), "values" : 40 }