Подтвердить что ты не робот

Как я могу обновить несколько документов в мангусте

Я нашел следующий script:

Device.find(function(err, devices) {
  devices.forEach(function(device) {
    device.cid = '';
    device.save();
  });
});

MongoDB имеет флаг "multi" для обновления по нескольким документам, но мне не удалось заставить это работать с mongoose. Это еще не поддерживается или я что-то не так?!

Device.update({}, {cid: ''}, false, true, function (err) {
  //...
});
4b9b3361

Ответ 1

В настоящее время я считаю, что update() в Mongoose имеет некоторые проблемы, см. https://groups.google.com/forum/#%21topic/mongoose-orm/G8i9S7E8Erg и https://groups.google.com/d/topic/mongoose-orm/K5pSHT4hJ_A/discussion.

Однако проверьте документы для обновления: http://mongoosejs.com/docs/api.html (его под моделью). Определение:

Model.update = function (query, doc, options, callback) { ... }

Вам нужно передать параметры внутри объекта, поэтому ваш код будет выглядеть следующим образом:

Model.update = function ({}, {cid: ''}, {multi: true}, function(err) { ... });

Я считаю, что Mongoose обертывает ваш cid в $set, так что это не то же самое, что запустить такое же обновление в оболочке mongo. Если вы запустили это в оболочке, то все документы были бы заменены на один с одним cid: ''.

Ответ 2

Вам нужно использовать опцию multi: true

Device.update({},{cid: ''},{multi: true});