So, I’m trying to delete many documents at once, and for some reason, the post middleware works for document.deleteOne()
, but not for Model.deleteMany()
. Specifically, I am looking for a fix for it not firing for Lecture.deleteMany(...)
and Chapter.deleteMany(...)
. Note that the documents themselves do end up being deleted.
Here is the response handler for one of my routes:
export const DELETE = catchAsync(async function (req, { params }) {
// Check if course exists
const course = await Course.findById(params.id).populate({
path: "chapters",
select: { id: 1 },
});
if (!course)
return new AppError("No courses found with the provided id", 404);
const { chapters } = course;
const chapterIds = chapters.map((chapter) => chapter.id);
// Delete course's lectures
await Lecture.deleteMany({ chapter: { $in: chapterIds } });
// Delete course's chapters
await Chapter.deleteMany({ _id: { $in: chapterIds } }); // Specifically this one
// Delete course
await course.deleteOne();
});
And here is the post middleware in my chapter model file (very similar to lecture):
chapterSchema.post(
["deleteOne", "deleteMany"],
{ document: true },
async function (doc, next) {
console.log("POST DELETE ONE CHAPTER");
const course = await Course.findById(this.course);
// Find and remove chapter from course
const index = course.chapters.findIndex((ch) => ch._id === doc._id);
course.chapters.splice(index, 1);
await course.save();
next();
}
);