我正在使用nodejs和mongoose为bootcamp和courses制作一个API,它们之间的关系是一个bootcamp可能有很多courses。
现在我正试图删除级联,以便我删除一个训练营,所有相关的课程也应该被删除。
在我的模型Bootcamp中:
// Cascade delete courses when a bootcamp is deleted
BootcampSchema.pre('remove', async function(next) {
console.log(`Courses being removed from bootcamp ${this._id}`);
await this.model('Course').deleteMany({ bootcamp: this._id });
next();
});
// Reverse populate with virtuals
BootcampSchema.virtual('courses', {
ref: 'Course',
localField: '_id',
foreignField: 'bootcamp',
justOne: false
});
bootcamps.js(控制器):
// @desc Delete a Bootcamp
// @route DELETE /api/v1/bootcamps/:id
// @access Private
exports.deleteBootcamp = asyncHandler(async (req, res, next) => {
const bootcamp = await Bootcamp.findById(req.params.id);
if(!bootcamp) {
return next(new ErrorResponse(`Bootcamp not found with id of ${req.params.id}`, 404));
}
bootcamp.remove();
res.status(200).json({ success: true, data: {} });
})
所以我在Postman中发送请求,得到以下错误:bootcamp.remove is not a function
知道为什么会这样吗还有别的办法吗
1条答案
按热度按时间qfe3c7zg1#
我真的不知道
remove()
是否像你在评论中提到的那样被弃用,你的代码看起来很好。如果你真的可以用
await Bootcamp.findById(req.params.id)
得到bootcamp
,那么为你的类Bootcamp
创建的模式就是正确的。另一种选择是使用
deleteOne()
。您还必须为此更新中间件: