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

การหาค่าสูงสุดจาก Sub-arrays ในเอกสาร MongoDB ด้วย Aggregation

ใช้ Aggregation Framework ร่วมกับ $unwind, $sort, $limit เพื่อหาค่าสูงสุดจาก Sub-arrays

ตัวอย่างการใช้งาน

สร้างคอลเลกชันพร้อมข้อมูลนักเรียนและคะแนนคณิตศาสตร์:

> db.findHighestValueDemo.insertOne(
... {
...   _id: 10001,
...   "StudentDetails": [
...     { "StudentName": "Chris", "StudentMathScore": 56},
...     { "StudentName": "Robert", "StudentMathScore": 47 },
...     { "StudentName": "John", "StudentMathScore": 98 }
...   ]
... }
... );
{ "acknowledged" : true, "insertedId" : 10001 }
> db.findHighestValueDemo.insertOne(
... {
...   _id: 10002,
...   "StudentDetails": [
...     { "StudentName": "Ramit", "StudentMathScore": 89},
...     { "StudentName": "David", "StudentMathScore": 76 },
...     { "StudentName": "Bob", "StudentMathScore": 97 }
...   ]
... }
... );
{ "acknowledged" : true, "insertedId" : 10002 }

แสดงเอกสารทั้งหมด:

> db.findHighestValueDemo.find().pretty();

ผลลัพธ์:

ค้นหาค่าสูงสุดจาก Sub-arrays ทั้งหมด

> db.findHighestValueDemo.aggregate([
... {$project:{"StudentDetails.StudentName":1, "StudentDetails.StudentMathScore":1}},
... {$unwind:"$StudentDetails"},
... {$sort:{"StudentDetails.StudentMathScore":-1}},
... {$limit:1}
... ]).pretty();

ผลลัพธ์ (คะแนนสูงสุดคือ 98 ของ John):

ขั้นตอน Pipeline:

  1. $project - เลือกฟิลด์ที่ต้องการ
  2. $unwind - แยกอาร์เรย์ StudentDetails เป็นเอกสารแยกต่างหาก
  3. $sort - เรียงลำดับคะแนนจากมากไปน้อย (-1)
  4. $limit: 1 - เอาเฉพาะอันดับแรก