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

Tìm và trả về subdocument thỏa mãn điều kiện MongoDB

Lọc subdocument trong mảng với $filter aggregation

Sử dụng $match tìm document cha, sau đó $addFields với $filter để chỉ giữ subdocument khớp điều kiện.

Dữ liệu UserDetails

> db.demo345.insertOne({
    "UserName": "Robert",
    "UserDetails": [
        { "isMarried": false, "CountryName": "US" },
        { "isMarried": true, "CountryName": "UK" },
        { "isMarried": false, "CountryName": "AUS" }
    ]
});

Pipeline lọc isMarried = true

> db.demo345.aggregate([
    { $match: { UserName: "Robert" } },
    {
        $addFields: {
            UserDetails: {
                $filter: {
                    input: "$UserDetails",
                    cond: { $eq: ["$$this.isMarried", true] }
                }
            }
        }
    }
]);

Kết quả

{
    "_id": ObjectId("..."),
    "UserName": "Robert",
    "UserDetails": [{ "isMarried": true, "CountryName": "UK" }]
}

Đặc điểm: Trả về document gốc nhưng mảng UserDetails chỉ chứa phần tử thỏa mãn. Document gốc không bị sửa đổi.