【问题标题】:Mongoose findOneAndUpdate updates non-existent entryMongoose findOneAndUpdate 更新不存在的条目
【发布时间】:2018-03-05 19:23:31
【问题描述】:

我目前正在努力添加“忘记密码”功能,但我遇到了一个我自己无法解决的问题。

在我的猫鼬 findOneAndUpdate 函数中,我注意到它会更新一个条目,即使该条目不存在。

这是我的功能:

router.put('/resetpass', (req, res) => {
    const {resetPassLink, password} = req.body;
    Users.findOneAndUpdate({resetPassLink : resetPassLink}, {$set : {password : password, resetPassLink: ''}}, function(error, feedback) {
        if (error) throw error;
        return res.send(feedback);
})

})

This post 建议提问的用户遇到了问题,因为他的函数没有产生任何错误,但是我的确实产生了错误。

我不确定我的代码出了什么问题。一旦它注意到没有带有它正在寻找的值的resetPassLink-field,它不应该抛出错误吗?

我到底做错了什么,我该如何解决?

【问题讨论】:

  • 您期望的行为是什么?
  • 获取错误信息。实际上,我刚刚找到了解决方案,并且将删除这个问题,因为我在这里找到了答案:stackoverflow.com/questions/10551313/…,因为在阅读了那个问题之后,我发现它们太相似了。

标签: node.js mongoose mongoose-schema


【解决方案1】:

您需要改进您的查询,如下所示:

router.put('/resetpass', (req, res) => {
const {resetPassLink, password} = req.body;

Users.findOneAndUpdate({resetPassLink : resetPassLink, resetPassLink: 
{$exists: true}, password: {$exists: true}}, {$set : 
{password : password, resetPassLink: ''}}, (error, feedback) => {
    if (error) {   
    console.log(error)     
   }; else {
    return res.send(feedback);
}
});

【讨论】:

  • 你的回答真的有什么不同吗?
  • 我认为他只是检查值是否存在,如果不存在,则会生成错误消息
  • 如果 db 中不存在特定字段,它会给您错误,否则它可以根据需要更新您的数据。
猜你喜欢
  • 1970-01-01
  • 2020-08-19
  • 2020-07-11
  • 1970-01-01
  • 2016-09-13
  • 2017-05-06
  • 2020-08-10
  • 2017-08-13
  • 1970-01-01
相关资源
最近更新 更多