【问题标题】:In MongoDB how do you use $set to update a nested value/embedded document?在 MongoDB 中,如何使用 $set 更新嵌套值/嵌入文档?
【发布时间】:2011-04-19 05:05:13
【问题描述】:

在 MongoDB 中如何使用 $set 更新嵌套值?

例如,考虑具有以下文档的集合 people:

{
  _id: ObjectId("5a7e395e20a31e44e0e7e284"),
  name: "foo",
  address: { street: "123", town: "bar" }
}

如何将嵌入在address 文档中的street 字段从"123" 更新为"Main Street"?

【问题讨论】:

    标签: mongodb mongodb-query


    【解决方案1】:

    使用dot notation:

    db.people.update({ }, { $set: { "address.street": "Main Street" } })
    

    【讨论】:

    • 即使地址不存在,这是否有效?我知道 $set 如果地址上不存在它会创建街道,但是如果祖先属性不存在,会有什么行为?此外,您的链接需要登录。
    • @Tom,感谢您对链接的提醒,我已修复它。回答您的问题:如果它们不存在,它将为您创建所需的祖先属性。
    • @Tom 是的,它会的。它会将整个对象创建到您正在设置的字段。 (迟到的回复,但希望这对其他绊倒这个问题的人有用)
    • 如果地址是数组,如何设置相同的字段。例如:{ _id: ObjectId("5a7e395e20a31e44e0e7e284"), name: "foo", address: [{ street: "123", town: "bar" }] }
    • 如何使用嵌入数组的现有值?另见stackoverflow.com/questions/69494035/…
    【解决方案2】:

    除了 Niels 的回答之外,还要验证嵌套值的“类型”。就我而言,它是由 json 形成的“字符串”。尽管这可能不太可能,但请确保该值具有正确的类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-04
      • 2017-03-06
      • 1970-01-01
      • 1970-01-01
      • 2010-11-11
      • 2020-08-25
      • 2021-11-30
      • 2015-08-27
      相关资源
      最近更新 更多