mongoDB:更新嵌套数组对象

时间:2016-01-25 10:18:26

标签: javascript mongodb

我希望更新标识为BAHx9KeKjuMePce6f的嵌套对象:

{
    "_id" : "sgG6G9XTvvjj7uxwQ",
    "target" : [
        {
            "title" : "content",
            "id" : "ePce6fBAHx9KeKjuM"
        },
        {
            "title" : "content",
            "id" : "BAHx9KeKjuMePce6f" <--
        }
    ]
}

所以这就是我的尝试:

var newData = { title: "new", one: "more", id: 'BAHx9KeKjuMePce6f' };

Collection.update(
    { _id: 'sgG6G9XTvvjj7uxwQ', 'target.id': 'BAHx9KeKjuMePce6f' }, 
    { $set: newData }
);

结果应为:

{
    "_id" : "sgG6G9XTvvjj7uxwQ",
    "target" : [
        {
            "title" : "content",
            "id" : "ePce6fBAHx9KeKjuM"
        },
        {
            "title": "new", 
            "one": "more",
            "id" : "BAHx9KeKjuMePce6f"
        }
    ]
}

2 个答案:

答案 0 :(得分:2)

为了更新数组中的特定元素,您可以使用mongodb positional $ operator

尝试以下查询:

var newData = { title: "new", one: "more", id: 'BAHx9KeKjuMePce6f' };

Collection.update(
    { _id: 'sgG6G9XTvvjj7uxwQ', 'target.id': 'BAHx9KeKjuMePce6f' }, 
    { $set: { 'target.$': newData } }
);

答案 1 :(得分:1)

您需要使用位置参数$来表示您要更新数组元素,而不是文档的根,请参阅documentation

Collection.update({
  _id: 'sgG6G9XTvvjj7uxwQ',
  'target.id': 'BAHx9KeKjuMePce6f'
}, {
  $set: {
    "target.$": newData
  }
});