MongoDB:只更新嵌套数组的一个对象

时间:2016-01-07 19:23:11

标签: mongodb

我想更改data

第二个元素的第三个group元素
{
    "_id" : "wLXDvjDvbsxzfxabR",
    "group" : [
        {
            "title" : "title 1",
            "data" : [
                {
                    "note" : "text"
                }
            ]
        },
        {
            "title" : "title 2",
            "data" : [
                {
                    "note 1" : "text"
                },
                {
                    "note 2" : "text"
                },
                {
                    "note 3" : "text"
                }
            ]
        }
    ]
}

这就是我正在做的,但它给了我一个错误的结果:

var setObject = { group.2.data.3: { 'new note': 'new text'} }

Collection.update(
    { _id: 'wLXDvjDvbsxzfxabR' }, 
    { $set: setObject }
);

通过这个新元素被添加到组中 - 这不是我想要的:

    {
        "data" : {
            "3": {
                "note" : "text"
            }
        }
    }

我只想将对象{ "note 3": "text" }设置/更新为{ 'new note': 'new text'}并保持结构不变。

结果应为

{
    "_id" : "wLXDvjDvbsxzfxabR",
    "group" : [
        {
            "title" : "title 1",
            "data" : [
                {
                    "note" : "text"
                }
            ]
        },
        {
            "title" : "title 2",
            "data" : [
                {
                    "note 1" : "text"
                },
                {
                    "note 2" : "text"
                },
                {
                    "new note" : "new text"
                }
            ]
        }
    ]
}

1 个答案:

答案 0 :(得分:1)

数组是零索引的,所以:

 - {hostname: router123, example: no ip cef}

正如Mongodb's doc所说:

  

要通过从零开始的索引位置访问数组元素,   将数组名称与点(。)和从零开始的索引连接起来   位置,用引号括起来

var setObject = { 'group.1.data.2': { 'new note': 'new text'} }