如何解决如何在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)
})
})
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。