Mogoose findOneAndUpdate回调不是函数

时间:2019-02-25 14:43:48

标签: node.js mongodb

当我尝试更新现有文档时收到错误。我查看了其他解决方案,但无法解决我的问题。

错误:

MongooseError: Callback must be a function, got [object Object]

代码:

formSchemas.findOneAndUpdate({'email':email, 'condition1': condition1, 'condition2': condition2},
        { $set: { "v1": v1, "v2": v2,
          "v3": v3, "v4": v4,
          "v5": v5 }},
          {new: true},
          {returnOriginal:false},
           function(err, doc){
            if (err){
              console.log(err);
              return res.send({
                success: false,
                message: 'Error somewhere!'
              });
            } 
            return res.send({
              success: true,
              message: 'Updated!'
            });
        }); // findoneandupdate

v1,v2 ..是我要在mongo中更新的内容以及mongo中字段的名称。 不确定为什么回调不是函数。

1 个答案:

答案 0 :(得分:0)

findOneAndUpdate expects up to 4 arguments,它们都是可选的:

  

[条件]«对象»

     

[更新]«对象»

     

[选项]«对象»可选,请参阅Query.prototype.setOptions()

     

[options.lean]«对象»如果属实,猫鼬将返回文档   作为纯JavaScript对象而不是猫鼬文档。看到   Query.lean()。

     

[回调]«功能»

虽然提供了5个参数,但是{returnOriginal:false}是不需要的,并且与回调参数混淆。

returnOriginal在当前的Mongoose版本中不是有效的选项。如果应该返回新文档而不是原始文档,则new选项就是这种情况,该选项已被使用:

  

new:布尔-如果为true,则返回修改后的文档,而不是   原版的。默认为false(在4.0中更改)

应该是:

formSchemas.findOneAndUpdate({'email':email, 'condition1': condition1, 'condition2': condition2},
        { $set: { "v1": v1, "v2": v2,
          "v3": v3, "v4": v4,
          "v5": v5 }},
          {new: true},
           function(err, doc){
           ...
           }
);

回调API已过时,猫鼬非常适合兑现承诺。