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

删除课程时出现.remove is not a function错误,寻求技术解决方案

解决Mongoose中.remove is not a function错误

这个错误是因为你使用的Mongoose版本(6.x及以上)已经废弃了文档实例的remove()方法,调用course.remove()自然会抛出该错误。下面是两种可行的修复方案:

方案1:替换为文档实例的deleteOne()方法

直接把await course.remove();替换为await course.deleteOne();即可,修改后的完整代码如下:

export const deleteCourse = catchAsyncError(async (req, res, next) => {
    const { id } = req.params;

    const course = await Course.findById(id);

    if (!course) return next(new ErrorHandler("Course not found", 404));

    await cloudinary.v2.uploader.destroy(course.poster.public_id);

    for (let i = 0; i < course.lectures.length; i++) {
        const singleLecture = course.lectures[i];
        await cloudinary.v2.uploader.destroy(singleLecture.video.public_id, {
            resource_type: "video",
        });
    }

    await course.deleteOne(); // 替换remove()为deleteOne()

    res.status(200).json({
        success: true,
        message: "Course Deleted Successfully",
    });
});

方案2:使用模型的findByIdAndDelete()优化查询

这种方式可以将“查询文档+删除文档”合并为一次数据库操作,减少IO开销,代码更简洁:

export const deleteCourse = catchAsyncError(async (req, res, next) => {
    const { id } = req.params;

    // 一步完成查询并删除,返回被删除的文档
    const course = await Course.findByIdAndDelete(id);

    if (!course) return next(new ErrorHandler("Course not found", 404));

    await cloudinary.v2.uploader.destroy(course.poster.public_id);

    for (let i = 0; i < course.lectures.length; i++) {
        const singleLecture = course.lectures[i];
        await cloudinary.v2.uploader.destroy(singleLecture.video.public_id, {
            resource_type: "video",
        });
    }

    res.status(200).json({
        success: true,
        message: "Course Deleted Successfully",
    });
});

两种方案都能解决你的问题,方案2的性能更优,推荐使用。

内容的提问来源于stack exchange,提问作者Karan Patel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 08:12:08