查询嵌套 Mongo 数组

rsm*_*ets 0 arrays nested find mongodb mongodb-query

不确定如何查询具有以下结构的 mongo db 对象的匹配的 directory_object_ids 。

"_id" : ObjectId("5702e52e51c2e40f55b3fd43"),
"_revision" : 4,
"enabled" : true,
"selector" : {
    "directory_object_ids" : [
        ObjectId("56c4bfb793e0be0eb6297369"),
        ObjectId("56c4bfc293e0be0eb6297391"),
        ObjectId("56cdfc65f2325d0e6346b7fe")
    ]
}
Run Code Online (Sandbox Code Playgroud)

我试过了

db.policies.find({"selector":{"directory_object_ids":{$elemMatch: {$eq:ObjectId("56cdfc65f2325d0e6346b7fe")}}}}).pretty()
Run Code Online (Sandbox Code Playgroud)

db.policies.find({"selector":{"directory_object_ids": {$eq:ObjectId("56cdfc65f2325d0e6346b7fe")}}}).pretty()
Run Code Online (Sandbox Code Playgroud)

没有运气。

先感谢您。

Ber*_*tel 5

直接调用查询中的嵌套对象find

db.policies.find({"selector.directory_object_ids": ObjectId("56cdfc65f2325d0e6346b7fe")}).pretty()
Run Code Online (Sandbox Code Playgroud)

如果您想请求与所有指定项目中至少一项匹配的记录,请使用$in

db.policies.find({
    "selector.directory_object_ids": {
        $in: [ObjectId("56c4bfc293e0be0eb6297391"), ObjectId("56cdfc65f2325d0e6346b7fe")]
    }
}).pretty()
Run Code Online (Sandbox Code Playgroud)

如果您想请求与所有指定项目匹配的记录,请使用$all

db.policies.find({
    "selector.directory_object_ids": {
        $all: [ObjectId("56c4bfc293e0be0eb6297391"), ObjectId("56cdfc65f2325d0e6346b7fe")]
    }
}).pretty()
Run Code Online (Sandbox Code Playgroud)