使用nodejs保存后如何从mongodb获取数据?

时间:2020-08-10 16:37:15

标签: javascript node.js mongodb express mongoose

我的Web应用程序类似于测验应用程序,用户应回答一个问题,服务器会将用户的结果存储在mongoDB数据库中。 我想要的是将文档保存在数据库中之后,我想获取此文档以将其发送给浏览器中的用户 保存笔记文档可以正常工作。 代码看起来像这样(假设用户的结果是10):

    const User_Result = require("../models/result_model")
router.post("/quiz/results", (req, res)=>{
       var result = new User_Result({
            _id: req.user._id,
            userResult: 10
      })
      result.save()


     //that should get data and send it but it send empty []
     User_Result.find({_id: req.user._id}).then(data=>{
            res.send(data)
        })
})

我认为在保存数据之前先查找数据的问题。

3 个答案:

答案 0 :(得分:2)

您无需使用find,因为.save()将返回保存的文档,您可以使用它

异步/等待版本

router.post("/quiz/results", async (req, res)=>{
       let result = new User_Result({
            _id: req.user._id,
            userResult: 10
      })
       const ReturnedResult = await result.save();
       return res.status(201).json(ReturnedResult);
})

承诺版本

router.post("/quiz/results",  (req, res) => {
    let result = new User_Result({
      _id: req.user._id,
      userResult: 10
    })
    result.save()
      .then(ReturnedResult =>return res.status(201).json(ReturnedResult))
      .catch(err => return res.status(500).json(err))

  })

答案 1 :(得分:1)

result.save()返回一个promise,您应该等待其解决:

result.save().then(() => {
  User_Result.find({_id: req.user._id}).then(data=>{
    res.send(data)
  })
})

答案 2 :(得分:1)

router.post("/quiz/results", async (req, res)=>{
       var result = new User_Result({
            _id: req.user._id,
            userResult: 10
      })
      const newResult = await result.save():
       return res.send(newResult).status(201);
})