mongoose 내장 함수인 findByID, findByIdAndUpdate, findByIdAndDelete에 대해 알아 보자.
(Collection은 가칭)
Collection.findByID(id) : Collection에서 _id가 id인 document를 찾는다.
Collection.findByIdAndUpdate(id, data) : Collection에서 _id가 id인 document를 찾아서 data 내용에 따라 수정한다.
Collection.findByIdAndDelete(id) : Collection에서 _id가 id인 document를 찾아서 삭제한다.
코드를 통해 살펴보자.
const findUserById = async (userId: string): Promise<UserResponseDto | null> => {
try {
const user = await User.findById(userId);
if (!user) {
return null;
}
return user;
} catch (error) {
console.log(error);
throw error;
}
}
위 코드는 어떤 프로젝트의 Service 코드이다.
findById(나머지 둘도 마찬가지)는 document를 불러와 저장할 수 있다.
이때 유의할 점은, user가 존재하지 않을 수 있기 때문에(존재하지 않는 userId)
null을 반환할 수 있도록 반환 타입 명시와 반환값 설정을 위와 같이 해줘야 한다.
const updateMovie = async (movieId: string, movieUpdateDto: MovieUpdateDto): Promise<MovieResponseDto | null> => {
try {
const movie = await Movie.findByIdAndUpdate(movieId, movieUpdateDto);
if (!movie) {
return null;
}
return movie;
} catch (error) {
console.log(error);
throw error;
}
}
이번에는 findByIdAndUpdate를 사용했다.
유의할 점은, find And Update 순서에서 눈치챌 수 있듯이,
find가 먼저 적용되기 때문에,
movie에는 update 전 document 정보가 저장된다.
따라서, update 후 document 정보를 저장하고 싶다면 아래와 같이 코드를 수정해야 한다.
const updateMovie = async (movieId: string, movieUpdateDto: MovieUpdateDto): Promise<MovieResponseDto | null> => {
try {
const movie = await Movie.findByIdAndUpdate(movieId, movieUpdateDto);
if (!movie) {
return null;
}
const data = await Movie.findById(movieId);
return data;
} catch (error) {
console.log(error);
throw error;
}
}
(더 좋은 방법이 있을텐데.. 아시는 분 있으시다면 댓글로 조언 부탁드립니다. 감사합니다.)
마지막으로 findByIdAndDelete를 사용해보자.
const deleteMovie = async (movieId: string): Promise<MovieResponseDto | null> => {
try {
const movie = await Movie.findByIdAndDelete(movieId);
if (!movie) {
return null;
}
return movie;
} catch (error) {
console.log(error);
throw error;
}
}
이때도 movie에는 삭제 전 정보가 저장된다.
내가 삭제한 정보에 대해서 확인하고 document를 보내주기 위해(?) 위와 같은 로직을 작성하였다.
이렇게 mongoose 내장 함수인 findById, findByIdAndUpdate, findByIdAndDelete를 통해
update, delete, get 메서드로 정보를 수정, 삭제, 조회하는 코드를 구현하는 방법을 공부해보았다.