exec()
- Mongoose의 쿼리를 실행하고, 결과를 Promise 객체로 반환함.
- 기본적으로 Mongoose는 쿼리를 실행할 때 Promise/A+를 준수하기 때문에 exec()를 명시적으로 호출하지 않아도 Promise를 반환함. 그러나 exec()를 사용하면 추가적인 메소드 체이닝이 가능해짐.
- exec()는 일반적으로 데이터베이스에서 데이터를 조회하고, 그 결과를 처리할 떄 사용됨.
- exec()를 사용하면 Mongoose가 반환하는 Document 객체가 Mongoose의 모델 인스턴스이므로, Mongoose의 가상(Virtual) 및 인덱스(Index)와 같은 기능을 활용할 수 있음.
const result = await MyModel.find({}).exec();
lean()
- 쿼리 결과를 일반 JavaScript 객체로 변환함.
- Mongoose 추가 기능이 비활성화 되어 메모리 사용량을 줄일 수 있음.
- Mongoose가 반환하는 Document 객체가 Mongoose의 모델 인스턴스가 아닌 일반 자바스크립트이므로, Mongoose의 추가 기능(Virtual 및 인덱스)와 같은 기능들을 사용할 수 없음.
- lean()은 주로 데이터를 조회한 후 해당 데이터를 가공하거나, JSON 형식으로 직렬화하여 클라이언트에 응답할 때 사용함.
const result = await MyModel.find({}).lean();
요약
exec()
: Mongoose의 추가 기능을 활용하고자 할 때 사용됨.
lean()
: 메모리 사용을 줄이고자 할 때 사용됨.