Mongo DB-过滤嵌套数组中的数据元素

时间:2019-11-11 23:51:28

标签: mongodb mongodb-query aggregation-framework

查询:

db.DEFAULT.find({ "bookStore.books.book.bookId":7501},{"bookStore.books.book.bookId" :1});

收藏:

{
"_id" : ObjectId("5988814feb46972540cebccd"),
"bookStore" : [ 
    {
        "books" : [ 
            {
                "book" : {
                    "bookId" : 7501
                }
            }, 
            {
                "book" : {
                    "bookId" : 7502
                }
            }, 
            {
                "book" : {
                    "bookId" : 7500
                }
            }
        ]
    }
]
}

运行查询时,它将显示所有3条记录。无论如何,结果中只会显示匹配的记录。

1 个答案:

答案 0 :(得分:1)

您需要将$map$filter配合使用,因为您的数组具有多层以上的嵌套:

db.collection.aggregate([
    {
        $addFields: {
            bookStore: {
                $map: {
                    input: "$bookStore",
                    as: "bs",
                    in: {
                        books: {
                            $filter: {
                                input: "$$bs.books",
                                as: "b",
                                cond: {
                                    $eq: [ "$$b.book.bookId", 7501 ]
                                }
                            }
                        }
                    }
                }
            }
        }
    }
])

Mongo Playground