当我尝试更新现有文档时收到错误。我查看了其他解决方案,但无法解决我的问题。
错误:
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中字段的名称。 不确定为什么回调不是函数。
答案 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已过时,猫鼬非常适合兑现承诺。