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

MongoDB Group Query นับจำนวนคะแนนซ้ำด้วย $group $sum

การนับจำนวนครั้งที่ค่าซ้ำกัน (Frequency Count) ใช้ $group กับ $sum: 1

> db.demo676.insertOne({"Marks": 87});
{ "acknowledged" : true, "insertedId" : ObjectId("5ea41eed04263e90dac943f2") }
> db.demo676.insertOne({"Marks": 75});
{ "acknowledged" : true, "insertedId" : ObjectId("5ea41ef304263e90dac943f3") }
> db.demo676.insertOne({"Marks": 87});
{ "acknowledged" : true, "insertedId" : ObjectId("5ea41ef404263e90dac943f4") }
> db.demo676.insertOne({"Marks": 65});
{ "acknowledged" : true, "insertedId" : ObjectId("5ea41ef704263e90dac943f5") }
> db.demo676.insertOne({"Marks": 65});
{ "acknowledged" : true, "insertedId" : ObjectId("5ea41ef804263e90dac943f6") }

แสดงข้อมูล:

> db.demo676.find();

คิวรีจัดกลุ่ม Marks และนับจำนวน

> db.demo676.aggregate({$group: {
...   _id: {Marks: "$Marks"},
...   'Count': {$sum: 1}
... }});

ผลลัพธ์:


คำอธิบาย

  • _id: {Marks: "$Marks"}: จัดกลุ่มตามค่า Marks (ใช้ object เพื่อให้ output ชัดเจน)
  • $sum: 1: นับ 1 ต่อเอกสารในกลุ่ม = จำนวนครั้งที่ค่านั้นปรากฏ

รูปแบบ Output ที่อ่านง่ายกว่า

db.demo676.aggregate([
  {$group: {_id: "$Marks", count: {$sum: 1}}},
  {$project: {_id: 0, Marks: "$_id", Count: "$count"}},
  {$sort: {Count: -1}}
]);

ผลลัพธ์:


Use Cases

  • วิเคราะห์การกระจายคะแนนสอบ
  • นับจำนวนออเดอร์ต่อสถานะ
  • หาค่าที่พบบ่อยที่สุด (Mode)
  • Detect anomalies (ค่าที่น้อยผิดปกติ)