[DB] Mongoose Cascade Delete

Hadam Cho·2021년 5월 27일

Database

목록 보기
4/8
post-thumbnail

환경

Postdelete될 때, 그 post._id를 참조하는 Comment들을 삭제해야 했다.

remove middleware

deleteOne docs
Post.deleteOne()를 통해 삭제 가능

pre middleware docs

shema.pre('deleteOne', (next) => {
  // ...
  next();
});

코드 적용

routes/post.js

Post.deleteOne({ _id: postId }, (err) => {
  // ...
});

models/Post.js

postSchema.pre(
  "deleteOne",
  { document: false, query: true },
  async function (next) {
    // post id
    const { _id } = this.getFilter();
    // 관련 댓글 삭제
    await Comment.deleteMany({ post: _id });
    next();
  }
);

문제점

this 사용 때문에 arrow function 대신 function 키워드를 이용해 callback 함수를 작성했다. 해결 방법이 있는지 더 알아봐야 할 것 같다.

profile
(。・∀・)ノ゙

0개의 댓글