Mongoose 6.0.2执行updateOne报错Query was already executed但数据更新成功求助
错误原因
Mongoose 6.x版本对查询执行做了严格限制,同一条查询实例只能执行一次。你当前的代码同时使用了await和回调函数处理updateOne请求:await会触发查询第一次执行(这也是为什么你能看到数据库数据已经更新成功),回调函数会触发同一条查询第二次执行,因此抛出「Query was already executed」错误导致应用崩溃。
修复方案
方案1:仅使用async/await语法(推荐)
删除回调函数,改用try/catch捕获异步错误即可:
async(req,res) => { try { await Todo.updateOne( {_id : req.params.id}, { $set : { status : "inactive" } } ); console.log("|===> 🗂️ Data Was Updated successfully! 🗂️ <====|\n"); res.json({ message : "Todo Was Update successfully!" }); } catch (updateError) { printError(updateError); res.status(500).json({ error : "There was a Server Side Error!" }); } }
方案2:仅使用回调函数处理
删除await关键字,仅通过回调处理执行结果:
(req,res) => { Todo.updateOne( {_id : req.params.id}, { $set : { status : "inactive" } }, (updateError) => { if (updateError) { printError(updateError); res.status(500).json({ error : "There was a Server Side Error!" }); } else { console.log("|===> 🗂️ Data Was Updated successfully! 🗂️ <====|\n"); res.json({ message : "Todo Was Update successfully!" }); } }); }
内容的提问来源于stack exchange,提问作者Md Tazri
相关产品推荐
相关产品推荐

