Mongoose 사용 시 exec()는 무엇인가?

Posted by , May 05, 2023
NestJsMongoDB
Series ofNestJs

thumbnail

Chat GPT에게 코드를 맡기다가...

MongoDB쪽에서 데이터를 가져오는 부분에 대해서 GPT에게 명령을 줬다.
근데 가져올 때 코드를 보니 신기한 게 있었다.

//내가 작성한 코드
await this.entity.findByIdAndDelete(params.itemId);

//GPT가 제시한 코드
await this.entity.findByIdAndDelete(params.itemId).exec();

근데 GPT가 제공한 코드를 보면 끝에 **.exec()**를 사용한다.
그래서 이 부분에 대해 궁금했다.

쓰면서 딱히 문제는 안되었는데 이런 부분은 모르고 넘어가면 더 큰 문제가 발생할 수 있으니까?

exec()는?

사실 exec()를 쓰고 안쓰고는 큰 차이는 없다.
왜냐하면 기능적으로는 완전히 동일하다.

Mongoose에서 대부분의 쿼리 메서드는 exec()를 호출하지 않아도 잘 동작한다.
하지만 save() 같은 쿼리 메서드에는 붙이지 않는다.

근데 이게 Mogoose 3 버전대에서는 쿼리 메서드에서 사용하는 쿼리를 프로미스로 만들기 위해서는 exec()를 필수로 붙여줘야 했다.
하지만 4버전 이후부터는 자체적으로 처리를 하기 때문에 exec()를 붙이지 않아도 되게 되었다.

하지만 가독성과 다른 코드와의 일관성을 위해서 exec()를 사용하는 것을 권장한다.
공식문서에서도 exec() 사용을 권장한다.

Mongoose 공식 문서 Promise 참고