Computer >> 컴퓨터 >  >> 프로그래밍 >> MongoDB

MongoDB find()와 findOne() 메서드의 핵심 차이점 완벽 정리

MongoDB에서 find()와 findOne()의 차이점

MongoDB에서 데이터를 조회할 때 가장 많이 사용되는 두 메서드가 바로 find()findOne()입니다. 두 메서드는 비슷해 보이지만 반환 방식에서 중요한 차이가 있습니다.

findOne()은 쿼리 조건과 일치하는 첫 번째 문서(document)를 반환하며, 일치하는 문서가 하나도 없으면 null을 반환합니다.

반면 find() 메서드는 일치하는 문서가 없더라도 null을 반환하지 않습니다. 대신 항상 커서(cursor) 객체를 반환합니다. 이 커서를 통해 결과 문서들을 순회(iterate)하며 접근할 수 있습니다.

예제로 확인하기

실제 예제를 통해 두 메서드의 동작 차이를 살펴보겠습니다. 먼저 빈 컬렉션(emptyCollection)을 생성합니다.

> db.createCollection('emptyCollection');
{ "ok" : 1 }

생성된 컬렉션에 문서가 몇 개 있는지 개수를 확인해 보겠습니다.

> db.emptyCollection.count();

실행 결과는 다음과 같습니다.

0

위 결과에서 알 수 있듯이 해당 컬렉션에는 아무 문서도 존재하지 않습니다. 이 상태에서 두 메서드가 각각 어떤 값을 반환하는지 테스트해 보겠습니다.

findOne() 동작 확인

다음 쿼리로 findOne()의 반환 결과를 확인할 수 있습니다.

> if(db.emptyCollection.findOne()){print("Returns Cursor")} else {print("Not returning cursor")}

실행 결과:

Not returning cursor

컬렉션이 비어 있어 findOne()은 null을 반환했기 때문에 if 조건문이 거짓으로 평가되었습니다.

find() 동작 확인

이번에는 find() 메서드로 같은 조건을 테스트해 보겠습니다.

> if(db.emptyCollection.find()){print("Returns Cursor")} else {print("Not returning cursor")}

실행 결과:

Returns Cursor

결과 문서가 없음에도 불구하고 find()는 null이 아닌 커서 객체를 반환하기 때문에 if 조건문이 참으로 평가되었습니다.

정리

두 메서드의 차이를 요약하면 다음과 같습니다.

  • findOne(): 조건에 일치하는 첫 번째 문서를 반환하며, 일치하는 문서가 없으면 null 반환
  • find(): 일치 여부와 관계없이 항상 커서(cursor)를 반환하며, null을 반환하지 않음

따라서 단일 문서 조회 시에는 findOne(), 여러 문서를 순회하며 처리해야 할 때는 find()를 사용하는 것이 적합합니다. 특히 조건문이나 null 체크 로직을 작성할 때는 두 메서드의 반환 값 차이를 반드시 고려해야 합니다.