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

255
21

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


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

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


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

спросил(а) 2021-01-25T16:09:53+03:00 4 месяца, 4 недели назад
1
Решение
310

В настоящее время я считаю, что 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: ''.

ответил(а) 2021-01-25T16:09:53+03:00 4 месяца, 4 недели назад
127

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

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

ответил(а) 2021-01-25T16:09:53+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема