Mongodb 是否可以更新嵌入文档中嵌入文档的属性(每个属性都位于数组中)?

Mongodb 是否可以更新嵌入文档中嵌入文档的属性(每个属性都位于数组中)?,mongodb,Mongodb,考虑到本文件: { "_id" : ObjectId("54d0a5cdc9311cad167f55d5"), "Title" : "Add Solaris Zone", "Type" : "System", "Tasks" : [ { "TaskName" : "Ask for an IP", "TaskDescription" : "Ask to netwo

考虑到本文件:

{
    "_id" : ObjectId("54d0a5cdc9311cad167f55d5"),
    "Title" : "Add Solaris Zone",
    "Type" : "System",
    "Tasks" : [
            {
                    "TaskName" : "Ask for an IP",
                    "TaskDescription" : "Ask to network team for an ip adress",
                    "Custom" : [
                            {
                                    "id" : ObjectId("54d0a5cdc9311cad167f55d3"),
                                    "name" : "ip",
                                    "value" : ""
                            },
                            {
                                    "id" : ObjectId("54d0a5cdc9311cad167f55d4"),
                                    "name" : "vlan",
                                    "value" : ""
                            }
                    ],
                    "Prerequisites" : [ ]
            }
}

是否可以为task where taksname=“Ask for a ip”更新属性“value”,比如字段ip


我可以更新更高级别的属性(如TaskName),但如果嵌入文档包含嵌入文档的数组,该怎么办?

通常要更新嵌套数组中的字段,可以使用$operator。

但是,由于只能使用一次,因此无法更新嵌套在neasted数组中的数组元素

但是,您可以做的是(假设您知道“task”元素的位置)指定如下位置:

update({...}, { $set: {"Tasks.0.Custom.$.value": "MyVal"}})

您好,谢谢您的回答,我不知道任务元素的位置,所以我应该怎么做:1)在我的应用程序中加载整个任务元素,编辑它并将其写回mongo,2)进行第一次查询以获得任务的位置(如果可能的话)3)更改我数据库的设计(但我不认为这是坏的)第二个选项不太好,因为有人可以在读取和更新之间编辑元素,所以您可能会更新错误的元素。我会选择第一个或第三个,两者都很好。若将任务放在主元素之外是有意义的,那个么第三个选项似乎不错。如果你在应用程序中加载整个聚合并使用它-第一个是我认为从主文档中获取任务是没有意义的,所以我将阅读整个文档,在我的应用程序中更新并写回它。谢谢