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

หาค่าสูงสุดและต่ำสุด (Max/Min) ใน MongoDB ด้วย Aggregation $max $min

บทความนี้สาธิตการใช้ Aggregation Framework ด้วย $group, $max, $min เพื่อหาค่าสูงสุดและต่ำสุดของฟิลด์ตัวเลขในคอลเลกชัน

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

> db.maxAndMinDemo.insertOne({"Value":98});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd698a357806ebf1256f129") }
> db.maxAndMinDemo.insertOne({"Value":97});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd698af57806ebf1256f12a") }
> db.maxAndMinDemo.insertOne({"Value":69});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd698b357806ebf1256f12b") }
> db.maxAndMinDemo.insertOne({"Value":96});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd698b657806ebf1256f12c") }
> db.maxAndMinDemo.insertOne({"Value":99});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd698b957806ebf1256f12d") }

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

> db.maxAndMinDemo.find().pretty();
{ "_id" : ObjectId("5cd698a357806ebf1256f129"), "Value" : 98 }
{ "_id" : ObjectId("5cd698af57806ebf1256f12a"), "Value" : 97 }
{ "_id" : ObjectId("5cd698b357806ebf1256f12b"), "Value" : 69 }
{ "_id" : ObjectId("5cd698b657806ebf1256f12c"), "Value" : 96 }
{ "_id" : ObjectId("5cd698b957806ebf1256f12d"), "Value" : 99 }

คำนวณ Max และ Min พร้อมกัน

> db.maxAndMinDemo.aggregate([
  { "$group": {
    "_id": null,
    "MaximumValue": { "$max": "$Value" },
    "MinimumValue": { "$min": "$Value" }
  }}
]);

ผลลัพธ์

{ "_id" : null, "MaximumValue" : 99, "MinimumValue" : 69 }

คำอธิบาย

  • _id: null - Group ทุก Document เข้าเป็น Group เดียว (Global Aggregation)
  • $max: "$Value" - หาค่าสูงสุดของฟิลด์ Value
  • $min: "$Value" - หาค่าต่ำสุดของฟิลด์ Value

ตัวอย่างเพิ่มเติม: หา Max/Min แยกตาม Group

// หาคะแนนสูงสุด/ต่ำสุดของแต่ละ Student
db.scores.aggregate([
  { $group: {
    _id: "$studentId",
    maxScore: { $max: "$score" },
    minScore: { $min: "$score" }
  }}
]);

ตัวอย่าง: หา Document ที่มีค่า Max/Min (ไม่ใช่แค่ค่า)

// หา Document ที่ Score สูงสุด
db.scores.find().sort({ score: -1 }).limit(1);

// หรือใช้ Aggregation
db.scores.aggregate([
  { $sort: { score: -1 } },
  { $limit: 1 }
]);

Operator สถิติอื่นๆ ใน $group

  • $avg - ค่าเฉลี่ย
  • $sum - ผลรวม
  • $first, $last - ค่าแรก/สุดท้าย (ต้อง $sort ก่อน)
  • $stdDevPop, $stdDevSamp - ส่วนเบี่ยงเบนมาตรฐาน