假设我有以下内容
db.companies.insertOne({name:“ Fresh Apples Inc”,isStartup:true,员工人数:33,资金来源:12345678901234567890,详细信息:{ceo:“ Mark”},标签:[{title:“ super”} ,{title:“ perfect”}],foundingDate:new Date(),insertAt:new Timestamp()})
现在,我需要更新它并包括一个新的详细信息,以便获得详细信息:{ceo: "Mark", city: "New York"}
{
"_id" : ObjectId("5c71b362b3458dab6ca76419"),
"name" : "Fresh Apples Inc",
"isStartup" : true,
"employees" : 33,
"funding" : 12345678901234567000,
**"details" : {
"ceo" : "Mark",
"address" : "New York"
},**
"tags" : [
{
"title" : "super"
},
{
"title" : "perfect"
}
],
"foundingDate" : ISODate("2019-02-23T20:56:02.380Z"),
"insertedAt" : Timestamp(1550955362, 1)
}
如何更新而不丢失“ ceo”:“ Mark” ?
答案 0 :(得分:2)
尝试
db.companies.update({"_id" : ObjectId("5c71b362b3458dab6ca76419")},{$set: {"details.city": "New York"}})
答案 1 :(得分:0)
在这种情况下,您应该使用带有db.collection.update()
运算符的更新操作(db.collection.findOneAndUpdate()
,$set
或等效操作)。
如果您想update a field in an embedded document,则更新功能中的update
参数应如下所示:
{ $set: { "embededDocument.someField": "some value" } }
在这种情况下,您可以使用以下命令:
db.companies.update({ name: "Fresh Apples Inc" }, { $set: { "details.address": "New York" } })
请注意,您应该使用ObjectId
,因为可能有多个具有相同名称的文档,但是我认为这样更易于阅读。