findOneAndUpdate mongoose查询返回旧数据库值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了findOneAndUpdate mongoose查询返回旧数据库值相关的知识,希望对你有一定的参考价值。

以下是我的代码快照,我遇到了使用{new:true}作为附加参数的解决方案,但是我无法将它与.then()函数一起使用。我需要一些方法来检索更新的值。

router.post('/profile/:userId', checkAuth, (req, res, next) => {
Profile.findOneAndUpdate({
    name: req.body.name,
    age: req.body.age,
    user: req.body.user,
    education: req.body.education,
    location: req.body.location,
    phone: req.body.phone
}).then(result => {
    console.log(result);
    res.status(201).json(result);
}).catch(err => {
    console.log(err);
    res.status(500).json({error: err});
});

});

答案

我通过添加.exec()来解决它,以获得真正的承诺,因为Mongoose查询不返回承诺。

router.post('/profile/:userId', checkAuth, (req, res, next) => {
var query = {};
var update = {
    name: req.body.name,
    age: req.body.age,
    user: req.body.user,
    education: req.body.education,
    location: req.body.location,
    phone: req.body.phone
};
var options = {upsert: true, new: true,};
Profile.findOneAndUpdate(query, update, options)
    .exec()
    .then( result => {
        console.log(result);
        res.status(201).json(result);
    })
    .catch( err => {
        console.log(err);
        res.status(500).json({error: err});
    })

});

帮助链接 - > Mongoose - What does the exec function do?

另一答案

您需要添加选项new: true才能获取更新的文档。 http://mongoosejs.com/docs/api.html#model_Model.findOneAndUpdate

没有回调函数就无法使用此选项。

代码示例:

router.post('/profile/:userId', checkAuth, (req, res, next) => {
  Profile.findOneAndUpdate({
    name: req.body.name,
    age: req.body.age,
    user: req.body.user,
    education: req.body.education,
    location: req.body.location,
    phone: req.body.phone
  },(err) => {
      if (err) {
        console.log(err);
        res.status(500).json({error: err});
      } else {
        console.log(doc);
        res.status(201).json(doc);
      }
  });
});

以上是关于findOneAndUpdate mongoose查询返回旧数据库值的主要内容,如果未能解决你的问题,请参考以下文章

Mongoose:findOneAndUpdate 不返回更新的文档

Mongoose - 使用 findOneAndUpdate 更新子文档

Mongoose `findOneAndUpdate` 回调不传递更新的文档

Mongoose `findOneAndUpdate` 回调不传递更新的文档

Mongoose:findOneAndUpdate 不适用于多种条件

Mongoose findOneAndUpdate 更新多个字段