使用$ in和$ addtoSet Mongodb更新数组

时间:2016-09-10 06:37:06

标签: arrays mongodb mongodb-update

我正在使用$in$addToSet来更新我的馆藏中的数组。说我有这样的文件。

{ 
    _id: objectId(1), //this is just an example id
    names: ['harry', 'hermione']
},
{
    _id: objectId(2),
    names: ['ron']
},
{
    _id: objectId(3),
    names: ['dumbledoor']
}

我想更新所有这些文档,所以我有一个id数组

var arr_ids = [1, 2];

并像这样使用数组map

var ids = arr_ids.map(function(id) { return mongoose.Types.ObjectId(id); });

更新我馆藏中的所有文件。

db.update( { _id: { $in: ids } }, { $addToSet: { name : 'draco' } }, 
    function(err, results) {
      if(err) console.log(err);
      console.log(results);
    }
);

我使用$in$addToSet并且它可以工作并更新文档,但它只更新最后一个文档。

{ 
    _id: objectId(1), //this is just an example id
    names: ['harry', 'hermione']
},
{
    _id: objectId(2),
    names: ['ron', 'draco'] // it only update this document.
},
{
    _id: objectId(3),
    names: ['dumbledoor']
}

我不知道为什么。我不想创建一个for循环只是为了单独更新它,但在我看来,这是我的最后一招。请帮帮我。谢谢!

1 个答案:

答案 0 :(得分:1)

multi: true一样尝试

db.update( /*query*/, { $addToSet: { names : 'draco' } }, {multi:  true} ...

请参阅multi-parameterthis example了解相关文档