簡體   English   中英

findOneAndUpdate貓鼬查詢返回舊數據庫值

[英]findOneAndUpdate mongoose query returning old database value

以下是我的代碼快照,我遇到了使用{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});
    })

});

幫助鏈接-> 貓鼬-exec函數有什么作用?

您需要添加選項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);
      }
  });
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM