Mongoose findOneAndUpdate以不同的顺序返回参数

时间:2018-03-08 11:53:59

标签: javascript node.js mongodb mongoose

我目前正在和猫鼬一起工作,我遇到过一些我觉得非常奇怪的事情。

我的代码如下:

      Challenge.findOneAndUpdate({ _id: req.params.challengeId, users: req.user._id }, { $push: { submissions: submission._id } }, { new: true })
      .then(function(err, challengeUpdated) {
        console.log(challengeUpdated);
        console.log(err);
        if (err) {
          console.log('The error is : ');
          console.log(err);
          return res.status(401).json({ message: 'Error saving submission' });
        }
         else {
          return res.json(submission);
        }
      })

请注意我的function(err, challengeUpdated)如何在这里的文档:http://mongoosejs.com/docs/api.html#model_Model.findOneAndUpdate,它说它应该是这样的,但是当我记录它们时我err打印对象,并且challengeUpdated打印undefined / null。改变周围的参数似乎是我的黑客,所以我想知道是否有一些明显我在这里做错了。

注意:req.user._id可能不在users。这是我想要找到的错误。

看看这个问题的答案:Mongoose: findOneAndUpdate doesn't return updated document,似乎答案与我的答案相同。

希望别人遇到这个问题?

注意:我正在使用mongoose v5.5.1。

1 个答案:

答案 0 :(得分:2)

您的问题是您在基于Promise的代码中使用error-first callback arguments

使用Promise界面时应该如何:

Challenge.findOneAndUpdate({ _id: req.params.challengeId, users: req.user._id }, { $push: { submissions: submission._id } }, { new: true })
  .then((challengeUpdated) => {
    console.log('Success!')
    console.log(challengeUpdated)
  })
  .catch((err) => {
    console.error('An error occured', err)
  })

function(err, result) { }是为回调式代码保留的模式,不适用于Promises。