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

การรวมยอดรวมในกลุ่มเดียวด้วย $sum ใน MongoDB Aggregation

คำนวณสถิติหลายอย่างพร้อมกันในกลุ่มเดียวด้วย $sum และ $cond

ใช้ $group ร่วมกับ $sum และ $cond เพื่อคำนวณเงื่อนไขต่างๆ ในครั้งเดียว เช่น นับจำนวนที่เท่ากับค่าเฉพาะ นับจำนวนที่ไม่เท่ากับค่าเฉพาะ และรวมค่าที่ผ่านเงื่อนไข

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

> db.demo406.insertOne({ "Score": 35 });
> db.demo406.insertOne({ "Score": 55 });
> db.demo406.insertOne({ "Score": 35 });
> db.demo406.insertOne({ "Score": 45 });
> db.demo406.insertOne({ "Score": 65 });
> db.demo406.insertOne({ "Score": 45 });

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

> db.demo406.find();

ผลลัพธ์: 6 เอกสาร มีค่า Score: 35, 55, 35, 45, 65, 45

คำสั่ง Aggregation คำนวณ 3 สถิติพร้อมกัน

> db.demo406.aggregate([
  {
    $group: {
      _id: null,
      Score1: { $sum: { $cond: [{ $eq: ["$Score", 35] }, 1, 0] } },
      Score2: { $sum: { $cond: [{ $ne: ["$Score", 35] }, 1, 0] } },
      Score3: { $sum: { $cond: [{ $ne: ["$Score", 59] }, "$Score", 0] } }
    }
  }
]);

ผลลัพธ์ที่ได้

{ "_id": null, "Score1": 2, "Score2": 4, "Score3": 280 }

คำอธิบายแต่ละฟิลด์

  • Score1: นับจำนวนเอกสารที่ Score = 35 (มี 2 รายการ)
  • Score2: นับจำนวนเอกสารที่ Score ≠ 35 (มี 4 รายการ)
  • Score3: รวมค่า Score ของเอกสารที่ Score ≠ 59 (ทุกตัวเพราะไม่มี 59) = 35+55+35+45+65+45 = 280

รูปแบบ $cond

{ $cond: [ , , ] }

ใช้ร่วมกับ $sum เพื่อนับ (true=1, false=0) หรือรวมค่า (true=ค่าที่ต้องการ, false=0)

ประโยชน์

คำนวณสถิติหลายอย่างในหนึ่งครั้งของการอ่านข้อมูล (Single Pass) ประหยัดทรัพยากรมากกว่าการรันคิวรีหลายครั้ง