查找并更新数组中列出的许多文档
Posted
技术标签:
【中文标题】查找并更新数组中列出的许多文档【英文标题】:Find and update many documents listed in an array 【发布时间】:2019-07-04 00:31:41 【问题描述】:我正在尝试通过查找数组中列出的所有匹配文档来更新我的数据库,然后更新列出的多个文档,我能够使用 findOne()
更新单个文档但是当我使用 @987654322 @ 查找数组中匹配的所有文档。它不会更新。有什么解决办法吗?
示例文件:
_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
【问题讨论】:
处理回调中的错误bloodstock
是一个数组而不是一个对象。您必须遍历bloodstock
,然后需要一一保存。
【参考方案1】:
您可以使用带有选项 multi: true 的 update 方法来更新与您的查询匹配的多个文档。
Bloodstock.update(
serial_code : $in : ['one','two','three'] ,
$set: status: 'not available' ,
multi: true ,
function (err, result)
console.log(result)
);
您可以在此处查看有关选项的更多详细信息:https://docs.mongodb.com/manual/reference/method/db.collection.update/
【讨论】:
【参考方案2】:Mongoose 的回调通常采用两个参数,第一个参数代表错误,请看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
循环遍历这些文档。
【讨论】:
仍然给我 TypeError: bloodstock.save is not a function @JeremyAdriandeVera 修改了我的答案【参考方案3】:改用更新查询
Bloodstock.update(
serial_code : $in : ['one','two','three'] ,
$set: status: 'not available' ,
multi: true ,
function (err, result)
console.log(result)
)
【讨论】:
以上是关于查找并更新数组中列出的许多文档的主要内容,如果未能解决你的问题,请参考以下文章