Sử dụng aggregate với $unwind, $sort, $limit và $group để lấy các phần tử mảng có Id lớn nhất (mới nhất). Tạo collection:
> db.demo179.insertOne({
"Name": "Chris",
"Details": [ { "Id": 101, "Subject": "MongoDB" }, { "Id": 102, "Subject": "MySQL" } ]
});
{ "acknowledged": true, "insertedId": ObjectId("5e3980299e4f06af551997f9") }
> db.demo179.insertOne({
"Name": "David",
"Details": [ { "Id": 103, "Subject": "Java" }, { "Id": 104, "Subject": "C" } ]
});
{ "acknowledged": true, "insertedId": ObjectId("5e39802a9e4f06af551997fa") }
Hiển thị document.
Pipeline aggregate lấy 2 phần tử mới nhất (Id lớn nhất) trên toàn bộ collection:
> db.demo179.aggregate([
{ "$unwind": "$Details" },
{ "$sort": { "Details.Id": -1 } },
{ "$limit": 2 },
{ "$group": {
"_id": "$Details.Id",
"Name": { "$first": "$Name" },
"Details": { "$push": "$Details" }
}},
{ "$project": { "_id": 0, "Name": 1, "Details": 1 } }
])
Kết quả (2 phần tử Id 104 và 103 của David):
{ "Name": "David", "Details": [ { "Id": 103, "Subject": "Java" } ] }
{ "Name": "David", "Details": [ { "Id": 104, "Subject": "C" } ] }