You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 20:24:02