Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

Tìm các mục mới nhất trong mảng trên tất cả document MongoDB

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" } ] }