删除课程时出现.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
相关产品推荐
相关产品推荐

