как я могу обновить несколько документов в мангусте - PullRequest
47 голосов
/ 14 июля 2011

Я нашел следующий скрипт:

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

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

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

Ответы [ 3 ]

73 голосов
/ 14 июля 2011

В настоящее время я считаю, что 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 (в разделе Модель). Определение:

Предыдущее решение (устарело после версии mongoose 5+)

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

Вам необходимо передать параметры внутри объекта, чтобы ваш код был:

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

Новое решение

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

Model.updateMany = function ({}, {cid: ''}, function(err) { ... });

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

16 голосов
/ 24 апреля 2017

Вы должны использовать параметр multi: true

Device.update({},{cid: ''},{multi: true});
11 голосов
/ 09 октября 2018

Эти ответы устарели. Это актуальное решение:

Device.updateMany({}, { cid: '' });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...