MongoDB findById가 null을 return하는 경우 체크해봐야 될 것

modolee·2020년 12월 16일
2
post-thumbnail

MongoDB를 이용해서 개발 중, 한참 동안 삽질한 내용을 남깁니다.

문제

MongoDB에서 Document를 save 한 후 반환 받은 id를 가지고 바로 findById를 실행 할 때에는 문제가 없는데, Queue에 데이터를 넣어서 실행할 경우 findById가 항상 null을 반환하는 문제

상세

분명 정상적인 id로 Query를 날리는데, null을 return 하는 경우였습니다.

이상한 것은 findById findOne({ _id: id })은 모두 null을 return 하는데, find()로 모든 document를 검색하면 정상적으로 저장되어 있는 것이 확인되었습니다. 그리고 심지어 findOne({ otherField: value }) 처럼 id가 아닌 다른 필드 값으로는 정상적으로 검색이 됐습니다.

해결

Schema 정의 시 _id를 별도로 지정하지 않았거나 별도로 지정할 때 ObjectId로 지정한 것이 문제였습니다. id를 ObjectId 형태로 캐스팅하거나 Schema 정의 시 애초에 String으로 정의를 한다면 문제 없이 동작하게 됩니다. save 한 후 반환 받은 id를 바로 이용할 경우에는 ObjectId 형태이기 때문에 정상적으로 동작한 것이었고, Queue에 넘기며 String으로 변환되었기 때문에 ObjectId로 정의 된 _id를 검색할 수 없었던 것이었습니다.

  • NestJS에서 Mongoose를 이용한 Schema 정의 시 사용 방법
@Prop({ type: String, default: () => new ObjectId() })
_id: string;

생각

엉뚱하게 동시성 문제, 비동기 처리, 기타 등등의 이유라고 생각하여 구글해 해봤지만 해답을 찾을 수 없었습니다.

그러다 그냥 단순하게 생각하고 mongoose findById return null을 검색하고, 첫번째 게시물에서 해답을 찾고 허무해졌습니다. ㅎㅎㅎ

참고

profile
기초가 탄탄한 백엔드 개발자를 꿈꿉니다.

0개의 댓글