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

คำสั่ง MongoDB เรียงลำดับตามผลรวมของออบเจกต์ใน Inner Array

ใช้ $unwind, $group, $sort, $project

เพื่อเรียงลำดับเอกสารตามผลรวมของค่าเฉพาะใน inner array ให้แยกอาร์เรย์ คำนวณผลรวม เรียงลำดับ แล้วสร้างรูปแบบผลลัพธ์

> db.demo189.insertOne({ "_id": 100, "List": [ { "Value": 10 }, { "Value": 20 }, { "Value": 10 } ] });

คำสั่ง aggregate คำนวณจำนวน Value=10 แล้วเรียงมากไปน้อย:

db.demo189.aggregate([
  { "$unwind": "$List" },
  { "$group": { "_id": "$_id", "total": { "$sum": { "$cond": { "if": { "$eq": ["$List.Value", 10] }, "then": 1, "else": 0 } } }, "List": { "$push": { "Value": "$List.Value" } } } },
  { "$sort": { "total": -1 } },
  { "$project": { "List": 1 } }
])

ผลลัพธ์: _id 101 (มี Value=10 ทั้ง 3 ตัว) อยู่ก่อน _id 100 (มี 2 ตัว)