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

Truy vấn phần tử cuối mảng trong MongoDB

Để truy xuất phần tử cuối cùng của mảng, dùng $arrayElemAt với index âm (-1) trong aggregate.

Dữ liệu mẫu

> db.demo103.insertOne({ 
    "Details" : [ 
        { "StudentId" : 101, "Details" : "MongoDB" }, 
        { "StudentId" : 102, "Details" : "MySQL" }, 
        { "StudentId" : 103, "Details" : "Java" } 
    ], 
    "Details1" : [ { "StudentId" : 104, "Number" : 3 } ] 
});
{ "acknowledged" : true, "insertedId" : ObjectId("5e2ed2dd9fd5fd66da21446e") }

Pipeline aggregate

> db.demo103.aggregate([
    { $project: { 
        Details1: 1, 
        Details: { $arrayElemAt: [ "$Details", -1 ] } 
    }}, 
    { $match: { "Details.StudentId": 103 } } 
])

Kết quả

{ "_id" : ObjectId("5e2ed2dd9fd5fd66da21446e"), "Details1" : [ { "StudentId" : 104, "Number" : 3 } ], "Details" : { "StudentId" : 103, "Details" : "Java" } }

Giải thích:

  • $arrayElemAt: ["$Details", -1]: Lấy phần tử index -1 (phần tử cuối). Index dương: 0=đầu, 1=thứ 2...
  • Kết quả Details trở thành object đơn (không còn mảng)
  • Stage $match sau đó lọc trên object đó

Mở rộng:

  • Lấy N phần tử cuối: $slice: ["$Details", -N] (trả về mảng)
  • Lấy phần tử đầu: $arrayElemAt: ["$Details", 0] hoặc $first trong $group
  • Kết hợp $filter để lọc trước rồi lấy cuối