查找和更新数组中列出的许多文档

时间:2019-02-10 09:01:44

标签: node.js mongodb mongoose mean-stack

我试图通过查找数组中列出的所有匹配文档来更新数据库,然后更新列出的多个文档,但是我能够使用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

3 个答案:

答案 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/