我正在尝试更新如下所示的用户文档:
{
_id:"xyzdon'tcare",username:"john",examTrials:Array[
{
trialId:"x1",examId:"y",questions:Array[
{ques1 Object},{ques2 object}
]
},{
trialId:"x2",examId:"z",{ques2 object}
]
}]
}
我尝试了最直接的方法,先找到findOne()然后修改文档,然后再保存(save)。问题是,在新的请求到达之前,在上一次更新完成之前,我遇到了文档版本的竞争条件问题。
现在,我正尝试使用findOneAndUpdate()在特定的试验中更新问题数组中的问题对象,而我似乎还不知道该怎么做。
我所拥有的信息:
- 试用ID
- 问题obj
- 问题ID
我认为这就是我所需要的。有帮助吗?
------------编辑
app.post('/updatetrialsession',authenticateJWT,(req,res)=>{
User.findOneAndUpdate({
username: req.user.username
},{
$set: {'examTrials.$[elem1].questions.$[elem2]' : req.body.question,'examTrials.$[elem1].currentQuestion':req.body.questionIdx+1 }
},{
arrayFilters: [{'elem1.trialId': req.body.trialId },{'elem2': req.body.questionIdx}]
}).then(res=>{
console.log("updated")
})
})
currentQuestion已更新,但问题对象未更新。