我试图通过查找数组中列出的所有匹配文档来更新数据库,然后更新列出的多个文档,但是我能够使用findOne()
更新单个文档,但是当我使用find()
查找数组中匹配的所有文档。它不会更新。有什么解决办法吗?
样本文档:
_id:5c5ef16221a4961b68e64d98
serial_code:"one"
status:"available"
_id:5c5ef17541a4961b68e64d98
serial_code:"two"
status:"available"
我的代码:
Bloodstock.find({ serial_code : { $in : ['one','two','three'] } }, function(bloodstock) {
bloodstock.status = 'not available';
bloodstock.save(function(err) {
if (err) {
console.log(err);
} else {
console.log('success');
}
});
});
给我错误:
TypeError: bloodstock.save is not a function
答案 0 :(得分:3)
改为使用更新查询
Bloodstock.update(
{ serial_code : { $in : ['one','two','three'] } },
{ $set: { status: 'not available' }},
{ multi: true },
function (err, result){
console.log(result)
}
)
答案 1 :(得分:1)
猫鼬的回调通常使用两个参数,第一个表示和错误,请看here。因此,您的代码如下所示:
Bloodstock.find({ serial_code : { $in : ['one','two','three'] } }, function(error, bloodstockDocs) {
if(error) return;
for(let bloodstock of bloodstockDocs) {
bloodstock.status = 'not available';
bloodstock.save(function(err) {
if (err) {
console.log(err);
} else {
console.log('success');
}
});
}
});
编辑:find
返回一个集合,因此您需要使用for
循环来遍历那些文档。
答案 2 :(得分:0)
您可以使用带有选项 multi:true 的更新方法来更新与查询匹配的多个文档。
school.students_per_class()
您可以在此处查看有关选项的更多详细信息:https://docs.mongodb.com/manual/reference/method/db.collection.update/