【问题标题】:Update nested document with mutiple conditions使用多个条件更新嵌套文档
【发布时间】:2017-06-09 05:22:55
【问题描述】:
{
    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"
                }
            ]
        }
    ]
}

我需要更新role:"admin",其中条件匹配,例如id: 1Location 的数组name: "foo"Location "UserAccess.loginName": "paklon" 的嵌套数组,然后更新角色。

【问题讨论】:

标签: mongodb mongodb-query


【解决方案1】:

根据上述描述作为解决方案,请尝试在 MongoDB shell 中执行以下更新操作

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

【讨论】:

  • 工作非常感谢,但有一些变化:"Location.$.UserAccess.0.role": "admin"
【解决方案2】:

以下查询应该有效:

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

要更新数组中的特定元素,您需要使用positional operator "$",它实际上是第一个元素的占位符。因此它可以被替换为“0”,并且由于它只允许在查询中使用一次“$”,因此无论如何您都必须在查询末尾使用“0”。

另外看一下对应的mongodbdocumentation

【讨论】:

  • 据我所知你能告诉我$set中0的意义是什么
  • @PrashantPokhriyal 与“$”相同,用于指定要更新的数组元素。在后台“$”转换为“0”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-21
  • 2018-04-07
  • 1970-01-01
  • 2017-03-06
  • 2019-12-16
  • 2014-09-07
  • 2016-08-04
相关资源
最近更新 更多