Sử dụng $$ROOT để tham chiếu toàn bộ tài liệu gốc
Biến hệ thống $$ROOT tham chiếu đến tài liệu hiện tại trong pipeline. Kết hợp $sort, $group lấy bản ghi mới nhất theo nhóm.
Dữ liệu mẫu
> db.demo743.insertMany([
{ id: 1, ShippingDate: "2020-01-21", value: 50 },
{ id: 2, ShippingDate: "2020-05-10", value: 30 },
{ id: 3, ShippingDate: "2020-05-10", value: 60 },
{ id: 1, ShippingDate: "2020-05-11", value: 75 }
]);
Truy vấn: lấy bản ghi mới nhất (ShippingDate lớn nhất) cho mỗi id
db.demo743.aggregate([
{
$project: {
id: "$id",
ShippingDate: "$ShippingDate",
MyDoc: "$$ROOT"
}
},
{ $sort: { ShippingDate: -1 } },
{
$group: {
_id: { id: "$id" },
Result: { $first: "$MyDoc" }
}
},
{
$project: {
"Result.ShippingDate": 1,
"Result.id": 1,
"Result.value": 1,
_id: 0
}
}
]);
Kết quả
{ "Result": { "id": 3, "ShippingDate": "2020-05-10", "value": 60 } }
{ "Result": { "id": 2, "ShippingDate": "2020-05-10", "value": 30 } }
{ "Result": { "id": 1, "ShippingDate": "2020-05-11", "value": 75 } }
Mỗi id chỉ giữ bản ghi có ShippingDate mới nhất.