Mongodb 使用多个条件更新嵌套文档

Mongodb 使用多个条件更新嵌套文档,mongodb,mongodb-query,Mongodb,Mongodb Query,我需要更新角色:“admin”,条件匹配时,如id:1,Location的数组名称:“foo”和Location嵌套数组的“UserAccess.loginName:“paklon”,然后更新角色。以下查询应该可以工作: { id: 1, name: "venkat", description: "Description", address: "chennai", pinCode: "600100", authenticationCode: "12

我需要更新
角色:“admin”
,条件匹配时,如
id:1
Location
的数组
名称:“foo”
Location
嵌套数组的
“UserAccess.loginName:“paklon”
,然后更新角色。

以下查询应该可以工作:

{
    id: 1,
    name: "venkat",
    description: "Description",
    address: "chennai",
    pinCode: "600100",
    authenticationCode: "123",
    authenticated: false,
    deleted: false,
    Location: [
        {
            name: "foo",
            description: "LocationDecription",
            parent: "parent",
            UserAccess: [
                {
                    loginName: "paklon",
                    role: "role"
                }
            ]
        }
    ]
}
要更新数组中的特定元素,需要使用“$”作为第一个元素的占位符。因此,它可以替换为“0”,并且由于它允许在查询中只使用一次“$”,因此在任何情况下,您都必须在查询结束时使用“0”


另外,请根据上述描述查看相应的mongodb

,作为解决方案,请尝试在mongodb shell中执行以下更新操作

db.collection.update(
    {"id": 1, "Location.name": "foo", "Location.UserAccess.loginName": "paklon"}, 
    {$set: {"Location.0.UserAccess.0.role": "admin"}}
)

就我所知,你能告诉我0的意义吗$set@PrashantPokhriyal它与“$”相同,用于指定要更新的数组元素。在后台“$”转换为“0”查看类似的工作感谢,但有一些更改:“Location.$.UserAccess.0.role”:“admin”
db.collection.update({
    "id": 1,
    "Location": {
        $elemMatch: {
            "name": "foo",
            "UserAccess": {
                $elemMatch: {
                    "loginName": "paklon"
                }
            }
        }
    }
}, {
    $set: {
        "Location.$.UserAccess.0.role": "admin"
    }
})