如何在mongoose中更新多个文档

问题描述 投票:46回答:3

我找到了以下脚本:

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

MongoDB有多个文件更新的“多”标志,但我无法使用mongoose。这还不支持还是我做错了什么?!

Device.update({}, {cid: ''}, false, true, function (err) {
  //...
});
mongodb node.js mongoose
3个回答
76
投票

目前我相信在猫鼬中的update()有一些问题,请参阅:https://groups.google.com/forum/#%21topic/mongoose-orm/G8i9S7E8Erghttps://groups.google.com/d/topic/mongoose-orm/K5pSHT4hJ_A/discussion

但是,请查看文档以获取更新:http://mongoosejs.com/docs/api.html(在Model下)。定义是:

早期解决方案(在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包装在$ set中,所以这与在mongo shell中运行相同的更新不同。如果你在shell中运行它,那么所有文档将被一个cid: ''替换。


17
投票

您必须使用multi:true选项

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

12
投票

这些答案已被弃用。这是实际的解决方案:

Device.updateMany({}, { cid: '' });
© www.soinside.com 2019 - 2024. All rights reserved.