Sử dụng $unwind, $group với $cond để đếm số lần giá trị 10 xuất hiện, sau đó $sort giảm dần. Tạo collection:
> db.demo189.insertOne({
"_id": 100,
"List": [ { "Value": 10 }, { "Value": 20 }, { "Value": 10 } ]
});
{ "acknowledged": true, "insertedId": 100 }
> db.demo189.insertOne({
"_id": 101,
"List": [ { "Value": 10 }, { "Value": 10 }, { "Value": 10 } ]
});
{ "acknowledged": true, "insertedId": 101 }
Hiển thị document.
Pipeline aggregate: tách mảng, nhóm đếm số Value=10, sắp xếp giảm dần, giữ lại mảng gốc:
> 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 } }
])
Kết quả (document _id:101 có 3 lần Value=10 lên đầu):
{ "_id": 101, "List": [ { "Value": 10 }, { "Value": 10 }, { "Value": 10 } ] }
{ "_id": 100, "List": [ { "Value": 10 }, { "Value": 20 }, { "Value": 10 } ] }