【问题标题】:findOneAndUpdate mongoDB not returning properlyfindOneAndUpdate mongoDB 没有正确返回
【发布时间】:2020-04-11 04:10:35
【问题描述】:

我正在尝试将用户的选择作为字符串推送到他们的选择数组中并返回更新后的文档。

路由和函数成功运行,但是它返回带有空选择数组的用户。我相信问题出在控制器功能的某个地方,但我无法弄清楚。 非常感谢任何帮助!

为了提供帮助,这是我的控制台的屏幕截图,您可以在其中看到一个空的选择数组被返回。 Here is an image of my console.log


这是我调用函数的地方

 handleAnswerInput = (question) => {
    let answerTextSelected = question.Text;
    let answerTypeSelected = question.Type;
    let usersName = this.state.user._id
    this.setState({
        count: this.state.count + 1
    })
    saveUserandScore(usersName, answerTextSelected)
        .then(
            this.loadQuestion(this.state.count)

        )
    console.log(answerTextSelected)
    console.log(answerTypeSelected)
};

这是控制器功能(根据建议更新)

const saveUserAndTheirScore = (req, res) => {
  let filter = { _id: req.params.id }
  // let update = { choices: req.params.answer] }
  console.log(req.params.id)
  console.log(req.params.answer)
  User.update(
    { filter },
    {
      $push: { choices: req.params.answer }
    },
    {
      returnOriginal: false,
    },
  )
    .then(dbData => res.json(dbData))
    .catch(err => {
      console.log(err);
      res.json(err);
    });
};

这里是 axios 调用

    export const saveUserandScore = (id, answer) => {
  return axios.post(`/api/user/${id}/${answer}`);
};

【问题讨论】:

  • 再传递一个参数给你的 findOneAndUpdate let doc = await Character.findOneAndUpdate(filter, update, { new: true });
  • @Helpinghand:该选项在猫鼬中被命名为new。 mongodb驱动有一个不同的选项returnOriginal
  • 大家好!谢谢您的帮助。不幸的是,这不起作用
  • @JackFranklin 你在用猫鼬,对吧?然后是ˋnewˋ选项。另外,在您的最新代码中,您没有使用 findAndUpdate,而只是更新?

标签: javascript node.js reactjs mongodb express


【解决方案1】:

findOneAndUpdate(filter, update, options, callback) 有一个returnOriginal 选项,如果设置为true(这是默认值),它将在更新之前返回文档。在您的情况下,您可能希望将其设置为 false [1]。

不幸的是,mongoose 的相应选项被命名为new [2]。

[1]https://mongodb.github.io/node-mongodb-native/3.4/api/Collection.html#findOneAndUpdate

[2]https://mongoosejs.com/docs/api.html#query_Query-findOneAndUpdate

【讨论】:

  • 感谢帮助,不幸的是这并没有解决它:(
【解决方案2】:

您需要更改用户架构,因为您可能已将选项类型定义为字符串。它必须是一个数组。

【讨论】:

    猜你喜欢
    • 2019-10-14
    • 1970-01-01
    • 2019-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-26
    相关资源
    最近更新 更多