Обновите массив, используя $in и $addtoSet Mongodb

Я использую $in а также $addToSet обновить массив в моих коллекциях. Скажем, у меня есть такие документы.

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

Я хочу обновить все эти документы, поэтому у меня есть массив идентификаторов

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 ответ

Решение

Попробуйте это с multi: true вот так

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

Смотрите многопараметрический и этот пример для документации для него

Другие вопросы по тегам