一尘不染

我如何更新猫鼬中的多个文档

node.js

我发现以下脚本:

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

MongoDB具有“ multi”标志,用于更新多个文档,但是我无法使它与mongoose一起使用。这还不被支持还是我做错了什么?

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

阅读 254

收藏
2020-07-07

共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(在“模型”下)。定义是:

较早的解决方案(猫鼬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: ''

2020-07-07