我发现以下脚本:
Device.find(function(err, devices) { devices.forEach(function(device) { device.cid = ''; device.save(); }); });
MongoDB具有“ multi”标志,用于更新多个文档,但是我无法使它与mongoose一起使用。这还不被支持还是我做错了什么?
Device.update({}, {cid: ''}, false, true, function (err) { //... });
目前,我认为update()Mongoose中存在一些问题,请参阅:https : //groups.google.com/forum/#%21topic/mongoose- orm/G8i9S7E8Erg 和https://groups.google.com/d/topic/mongoose- orm / K5pSHT4hJ_A / discussion。
update()
但是,请检查文档以进行更新:http : //mongoosejs.com/docs/api.html(在“模型”下)。定义是:
较早的解决方案(猫鼬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: ''。
cid: ''