MongoDB更新深层嵌套数组

时间:2014-11-04 15:14:22

标签: mongodb

考虑以下文件:

{
    "comments": [
        {
            "id" : 1,
            "userid": "john",
            "comment": "lorem ipsum...",
            "responses": [
                {
                    "id" : 2,
                    "userid": "smith",
                    "comment": "lorem ipsum...",
                    "responses": [
                        {
                            "id" : 3,
                            "userid": "random",
                            "comment": "lorem ipsum...",
                            "responses": [] // I want to push a comment into this array
                        },
                        {
                            "id" : 4,
                            "userid": "guy",
                            "comment": "lorem ipsum..."
                        }
                    ]
                },
                {
                    "id" : 5,
                    "userid": "adam",
                    "comment": "lorem ipsum..."
                }
            ]
        }
    ]
}

有没有办法将文档推送到responses数组?所以在这种情况下,用户想要评论3级注释,我想将该注释推送到数组中。我可以在评论时将数组位置发送给用户并返回服务器,但我很确定这是不可靠的。此外,如果在那之间发生删除(我猜(?)),阵列中的位置会发生变化,所以它实际上是不行的。

1 个答案:

答案 0 :(得分:1)

如果您知道要达到该级别的索引序列,那么是:

> db.test.update({ ... }, { "$push" : { "comments.0.responses.0.responses.0.responses" : "this is my response" } })

0是索引。但是,像这样的多重嵌套结构几乎肯定是一个糟糕的数据建模选择。你应该考虑其他选择。也许modeling tree structures上的文档会有所帮助吗?