mongodb - 如何更新 Mongoose 中的多个文档?

我找到了以下脚本:

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

MongoDB 具有用于更新多个文档的“multi”标志,但我无法使用 mongoose 进行此操作。这还不支持还是我做错了什么?

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

最佳答案

目前我认为Mongoose中的update()有一些问题,见: 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 包装在 $set 中,因此这与在 mongo shell 中运行相同的更新不同。如果您在 shell 中运行它,那么所有文档都将被替换为具有单个 cid: ''.

的文档

https://stackoverflow.com/questions/6694507/

相关文章:

javascript - 在 JavaScript 中将 ObjectID (Mongodb) 转换

mongodb - 在 MongoDB 中查找具有不包含具有特定字段值的文档的数组的文档

python - Pymongo/MongoDB : create index or ensure

node.js - Mongoose 填充与对象嵌套

python - 哪个 Python API 应该与 Mongodb 和 Django 一起使用

python - 如何使用 pymongo 更新值?

mongodb - 修改和重放 MongoDB oplog

java - MongoDB中不区分大小写的排序

node.js - 如何使用 Node.js 在 MongoDB 中使用 cursor.forEac

mongodb - mongodb insert 命令中是否有 "upsert"选项?