在Mongo上更新收藏集

时间:2019-02-23 22:00:03

标签: mongodb

假设我有以下内容

  

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”

2 个答案:

答案 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,因为可能有多个具有相同名称的文档,但是我认为这样更易于阅读。