Sử dụng $sort giảm dần rồi $group lấy $first
Sắp xếp theo giá trị giảm dần, sau đó nhóm theo key và lấy bản ghi đầu tiên (giá trị lớn nhất) của mỗi nhóm.
Dữ liệu mẫu
> db.demo750.insertMany([
{ id: 101, value: 50 },
{ id: 102, value: 40 },
{ id: 101, value: 110 }
]);
Truy vấn
db.demo750.aggregate([
{ $sort: { value: -1 } },
{ $group: { _id: "$id", value: { $first: "$value" } } },
{ $project: { id: "$_id", value: 1 } }
]);
Kết quả
{ "_id": 102, "value": 40, "id": 102 }
{ "_id": 101, "value": 110, "id": 101 }
Mỗi id duy nhất kèm theo giá trị value lớn nhất.