ใช้ $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 ตัว)