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

Lọc giá trị cụ thể từ bản ghi MongoDB với $filter

Sử dụng $filter, $let, $slice trong $addFields

Kết hợp $filter để lọc mảng, $let định nghĩa biến trung gian, $slice lấy phần tử cuối cùng.

Dữ liệu mẫu

> db.demo751.insertOne({
  _id: 101,
  details: [
    { Name: "Robert", id: 110, Age: 21 },
    { Name: "Rae", id: 110, Age: 22 },
    { Name: "Ralph", id: 116, Age: 23 }
  ]
});

Truy vấn: lọc phần tử có id=110, lấy phần tử cuối cùng

db.demo751.aggregate([
  {
    $addFields: {
      details: {
        $let: {
          vars: {
            filtered: {
              $filter: {
                input: "$details",
                as: "out",
                cond: { $eq: ["$$out.id", 110] }
              }
            }
          },
          in: { $slice: ["$$filtered", -1] }
        }
      }
    }
  }
]);

Kết quả

{ "_id": 101, "details": [{ "Name": "Rae", "id": 110, "Age": 22 }] }

Trong các phần tử có id=110, lấy phần tử cuối cùng (Rae, Age 22).