如何更新嵌套数组中的字段(至少两级)

时间:2015-10-15 10:15:29

标签: mongodb

该文件是(我简化了结构):

    {
        "_id" : ObjectId("561f7896d3e4d2d8a6406baa"),
        "array" : [ 
            {
                "array" : [ 
                    {
                        "taskId" : 1,
                        "finished" : false
                    }
                ]
            }
        ]
    }  

我想将完成更新为真。
查询是

db.getCollection('JustTest').find({"array.array.taskId":1})

我尝试了db.getCollection('JustTest').update({"array.array.taskId":1},{$set:{"array.$.finished":true}})。但结果是

    {
        "_id" : ObjectId("561f7896d3e4d2d8a6406baa"),
        "array" : [ 
            {
                "array" : [ 
                    {
                        "taskId" : 1,
                        "finished" : false
                    }
                ],
                "finished" : true
            }
        ]
    }

并且"array.$.array.$.finished":true是非法的并返回错误信息。

我已阅读http://docs.mongodb.org/manual/reference/operator/update/positional/。我也发现了一个类似的问题How to update data in nested array in MongoDB,但答案可能很幼稚。

我不知道更新嵌套数组中的字段。修复位置不是一个好主意,因为可以推送或弹出数组(内部或外部)(从中间)。制作两个集合可以工作,但查询将是难。

0 个答案:

没有答案