Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MongoDB

MongoDB คำนวณค่าเฉลี่ย (Average) ด้วย $avg ใน Aggregation

Operator $avg ใน MongoDB Aggregation ใช้คำนวณค่าเฉลี่ยของ Field ที่เป็นตัวเลข เนื้อหานี้สาธิตการหาค่าเฉลี่ยของ Field Score จาก Collection demo159

ตัวอย่างข้อมูลทดสอบ

> db.demo159.insertOne({"Score":50});
{ "acknowledged" : true, "insertedId" : ObjectId("5e3557b2fdf09dd6d0853a01") }

> db.demo159.insertOne({"Score":70});
{ "acknowledged" : true, "insertedId" : ObjectId("5e3557b6fdf09dd6d0853a02") }

> db.demo159.insertOne({"Score":60});
{ "acknowledged" : true, "insertedId" : ObjectId("5e3557c4fdf09dd6d0853a03") }

แสดงข้อมูลทั้งหมด

> db.demo159.find();
{
  "_id" : ObjectId("5e3557b2fdf09dd6d0853a01"),
  "Score" : 50
}
{
  "_id" : ObjectId("5e3557b6fdf09dd6d0853a02"),
  "Score" : 70
}
{
  "_id" : ObjectId("5e3557c4fdf09dd6d0853a03"),
  "Score" : 60
}

Aggregation Query คำนวณ Average

> db.demo159.aggregate([
  { $group: { _id: null, AverageValue: { $avg: "$Score" } } }
]);

ผลลัพธ์

{ "_id" : null, "AverageValue" : 60 }

คำอธิบาย

  • $group: { _id: null } หมายถึง Group ทุก Document เป็น Group เดียว (Global Aggregation)
  • $avg: "$Score" คำนวณ (50 + 70 + 60) / 3 = 60
  • Ignore Non-Numeric: $avg จะข้ามค่า Null, Missing, Non-numeric อัตโนมัติ
  • Group By Field: { $group: { _id: "$category", avgScore: { $avg: "$Score" } } }
  • Operators ที่เกี่ยวข้อง: $sum, $min, $max, $stdDevPop, $stdDevSamp
  • ใช้ใน $project ได้: { $project: { avg: { $avg: "$scores" } } } (ค่าเฉลี่ย Array)

ตัวอย่างเพิ่มเติม: Average ของ Array Field

> db.demo159.insertOne({ "scores": [80, 90, 100] });
> db.demo159.aggregate([
  { $project: { avgScore: { $avg: "$scores" } } }
]);
// ผลลัพธ์: { "avgScore": 90 }