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

Projection phần tử mảng cụ thể trong MongoDB với $filter

Lọc và trả về phần tử mảng thỏa mãn điều kiện

Sử dụng $project với $filter trong aggregation để chỉ trả về các phần tử mảng khớp điều kiện, thay vì cả mảng.

Dữ liệu có trường isMarried

> db.demo355.insertOne({
    "id": 101,
    "details": [
        { "Name": "Chris", "isMarried": 1 },
        { "Name": "David", "isMarried": 0 },
        { "Name": "Mike", "isMarried": 1 }
    ]
});

Pipeline lọc isMarried = 1

> db.demo355.aggregate([
    {
        $project: {
            details: {
                $filter: {
                    input: "$details",
                    as: "out",
                    cond: { $eq: ["$$out.isMarried", 1] }
                }
            }
        }
    }
]);

Kết quả

{
    "_id": ObjectId("..."),
    "details": [
        { "Name": "Chris", "isMarried": 1 },
        { "Name": "Mike", "isMarried": 1 }
    ]
}

Giải thích:

  • input: "$details": Mảng nguồn
  • as: "out": Biến đại diện cho từng phần tử
  • cond: Điều kiện lọc, dùng $$out truy cập phần tử

Khác với $elemMatch projection: $filter trả về tất cả phần tử khớp, $elemMatch chỉ trả về phần tử đầu tiên khớp.