在MongoDB中,如何使用$set更新嵌套值/嵌入文档?

在MongoDB中,如何使用$set更新嵌套值/嵌入文档?,mongodb,mongodb-query,Mongodb,Mongodb Query,在MongoDB中,如何使用$set更新嵌套值 例如,考虑一个集合人>强>下面的文档: { _id: ObjectId("5a7e395e20a31e44e0e7e284"), name: "foo", address: { street: "123", town: "bar" } } 如何使用以下命令将地址文档中嵌入的街道字段从“123”更新为“Main street”?: 除了Niels的答案之外,还要验证嵌套值的“类型”。在我的例子中,它是由json形成的“字符串”。虽然这可

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

例如,考虑一个集合<强>人>强>下面的文档:

{
  _id: ObjectId("5a7e395e20a31e44e0e7e284"),
  name: "foo",
  address: { street: "123", town: "bar" }
}
如何使用以下命令将
地址
文档中嵌入的
街道
字段从
“123”
更新为
“Main street”


除了Niels的答案之外,还要验证嵌套值的“类型”。在我的例子中,它是由json形成的“字符串”。虽然这可能不太可能,但请确保该值具有正确的类型

即使地址不存在,此功能也有效吗?我知道$set会在地址上不存在的情况下创建street,但如果祖先属性不存在,会有什么行为?另外,您的链接需要登录。@Tom,谢谢您提醒我链接,我已经修复了它。回答你的问题:如果不存在,它将为你创建所需的祖先财产。@Tom是的,它会的。它将创建整个对象,直到您正在设置的字段。(回复较晚,但希望这对其他在这个问题上结结巴巴的人有用)如果地址是数组,如何设置相同的字段。例如:{u id:ObjectId(“5a7e395e20a31e44e0e7e284”),姓名:“foo”,地址:[{街道:“123”,城镇:“酒吧”}]}
db.people.update({ }, { $set: { "address.street": "Main Street" } })