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

คำนวณค่าเฉลี่ยใน MongoDB โดย Group ตาม Null (Global Average)

บทความนี้สาธิตการใช้ $group กับ _id: null เพื่อคำนวณค่าเฉลี่ย (Average) ของฟิลด์ตัวเลขทั้งหมดในคอลเลกชัน (Global Average) โดยไม่จัดกลุ่ม

ไวยากรณ์พื้นฐาน

db.yourCollectionName.aggregate([
  { $group: { _id: null, "anyFieldName": { $avg: "$yourFieldName" } } }
]);

สร้างข้อมูลตัวอย่าง

> db.caculateTheAverageValueDemo.insertOne({"Population":100});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd68a197924bb85b3f4895f") }
> db.caculateTheAverageValueDemo.insertOne({"Population":500});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd68a1c7924bb85b3f48960") }
> db.caculateTheAverageValueDemo.insertOne({"Population":200});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd68a237924bb85b3f48961") }
> db.caculateTheAverageValueDemo.insertOne({"Population":100});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd68a297924bb85b3f48962") }
> db.caculateTheAverageValueDemo.insertOne({"Population":100});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd68a2e7924bb85b3f48963") }

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

> db.caculateTheAverageValueDemo.find().pretty();
{ "_id" : ObjectId("5cd68a197924bb85b3f4895f"), "Population" : 100 }
{ "_id" : ObjectId("5cd68a1c7924bb85b3f48960"), "Population" : 500 }
{ "_id" : ObjectId("5cd68a237924bb85b3f48961"), "Population" : 200 }
{ "_id" : ObjectId("5cd68a297924bb85b3f48962"), "Population" : 100 }
{ "_id" : ObjectId("5cd68a2e7924bb85b3f48963"), "Population" : 100 }

คำนวณค่าเฉลี่ย Population ทั้งคอลเลกชัน

> db.caculateTheAverageValueDemo.aggregate([
  { $group: { _id: null, "AveragePopulation": { $avg: "$Population" } } }
]);

ผลลัพธ์

{ "_id" : null, "AveragePopulation" : 200 }

การคำนวณ: (100 + 500 + 200 + 100 + 100) / 5 = 1000 / 5 = 200

คำอธิบาย _id: null

  • _id: null หมายถึง Group ทุก Document เข้าเป็น Group เดียว (Single Group)
  • เหมือน GROUP BY () ใน SQL (ไม่มี GROUP BY Column)
  • ผลลัพธ์จะมีเพียง 1 Document เดียว

ตัวอย่างเพิ่มเติม: คำนวณหลายสถิติพร้อมกัน

db.caculateTheAverageValueDemo.aggregate([
  { $group: {
    _id: null,
    avgPop: { $avg: "$Population" },
    minPop: { $min: "$Population" },
    maxPop: { $max: "$Population" },
    sumPop: { $sum: "$Population" },
    count: { $sum: 1 }
  }}
]);
{ "_id" : null, "avgPop" : 200, "minPop" : 100, "maxPop" : 500, "sumPop" : 1000, "count" : 5 }

ตัวอย่าง: ค่าเฉลี่ยแบบมีน้ำหนัก (Weighted Average)

db.grades.aggregate([
  { $group: {
    _id: null,
    weightedAvg: { $avg: { $multiply: ["$score", "$weight"] } }
  }}
]);