我找到了以下脚本:
Device.find(function(err, devices) {
devices.forEach(function(device) {
device.cid = '';
device.save();
});
});
MongoDB有多个文件更新的“多”标志,但我无法使用mongoose。这还没有得到支持,还是我做错了什么?!
Device.update({}, {cid: ''}, false, true, function (err) {
//...
});
答案 0 :(得分:72)
目前我相信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: ''
的文档。
答案 1 :(得分:16)
您必须使用multi:true选项
Device.update({},{cid: ''},{multi: true});
答案 2 :(得分:10)
不建议使用这些答案。这是实际的解决方案:
Device.updateMany({}, { cid: '' });
答案 3 :(得分:1)
这是我们的处理方式:
db.collection.updateMany(condition, update, options, callback function)
所以这是一个基于文档的示例:
// creating arguments
let conditions = {};
let update = {
$set : {
title : req.body.title,
description : req.body.description,
markdown : req.body.markdown
}
};
let options = { multi: true, upsert: true };
// update_many :)
YourCollection.updateMany(
conditions, update, options,(err, doc) => {
console.log(req.body);
if(!err) {
res.redirect('/articles');
}
else {
if(err.name == "ValidationError"){
handleValidationError(err , req.body);
res.redirect('/new-post');
}else {
res.redirect('/');
}
}
});
这对我来说很好,希望对您有帮助:)
答案 4 :(得分:1)
@sina提到:
let conditions = {};
let options = { multi: true, upsert: true };
Device.updateMany(conditions , { cid: '' },options );
您可以在options
之后添加回调函数,但这不是必需的。
答案 5 :(得分:0)
你可以试试下面的方法
try {
const icMessages = await IcMessages.updateMany({
room: req.params.room
}, {
"$set": {
seen_status_2: "0"
}
}, {
"multi": true
});
res.json(icMessages)
} catch (err) {
console.log(err.message)
res.status(500).json({
message: err.message
})
}