如何在foreach循环中实现异步mongodb函数



我有一个类似智力竞赛的应用程序,用户应该在提交后回答并查看结果。我将结果保存在mongoDB数据库中,并使用foreach循环,因为这是多个问题,并且我希望在保存文档后将结果发送给用户注意:保存文档并替换它很好。我的代码如下:

//answers model
const User_Result = require("../models/result_model")
router.post("/quiz/results", (req, res)=>{
var lastResult = 1;
answersLenght.forEach((single, i) => {
if(i==0) { //for the first right answer it should creat a document
var result = new User_Result({
id: req.user._id,
endResult: lastResult
})
result.save()
} else { // for other answers it should update endResult 
lastResult = lastResult + 1
User_Result.findOneAndReplace({_id: req.user._id}, {endResult: lastResult}, {new: true}, (err, r)=>{console.log(r)})
}
})
//it send empty []
User_Result.find({_id: req.user._id}).then(data=>{
res.send(data)
})
})

它发送空[],因为它在保存之前会查找文档

您正在使用id:保存User_Result文档

var result = new User_Result({
id: req.user._id,
endResult: lastResult
})

但是,您正在使用_id查询User_Result文档。

您要做的是将_id设置为req.user._id,如下所示:

//answers model
const User_Result = require("../models/result_model")
router.post("/quiz/results", (req, res)=>{
var lastResult = 1;
answersLenght.forEach((single, i) => {
if(i==0) { //for the first right answer it should creat a document
var result = new User_Result({
_id: req.user._id,
endResult: lastResult
})
result.save()
} else { // for other answers it should update endResult 
lastResult = lastResult + 1
User_Result.findOneAndReplace({_id: req.user._id}, {endResult: lastResult}, {new: true}, (err, r)=>{console.log(r)})
}
})
//it send empty []
User_Result.find({_id: req.user._id}).then(data=>{
res.send(data)
})
})

最新更新