2016-09-10 2 views
1

Я использую $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 как это.

Чтобы обновить все документы в моих коллекциях.

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} ... 

См multi-parameter и this example для документации для него

Смежные вопросы