บทความนี้สาธิตการใช้ 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- ส่วนเบี่ยงเบนมาตรฐาน