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

MongoDB에서 findById가 문서 목록을 반환할 때? findOne()으로 단일 문서만 조회하는 방법

MongoDB에서 findById 또는 find()를 사용해 특정 ID로 문서를 조회하면, 결과가 단일 객체가 아닌 문서 목록(커서) 형태로 반환됩니다. 만약 딱 하나의 문서만 필요하다면 findOne() 메서드를 사용하는 것이 가장 좋습니다. findOne()은 조건에 일치하는 첫 번째 문서 하나만 직접 반환하기 때문에, _id를 기준으로 조회하면 원하는 단일 결과를 깔끔하게 얻을 수 있습니다.

예제 데이터 준비하기

먼저 예제에 사용할 컬렉션을 만들고 문서를 삽입해 보겠습니다.

> db.demo340.insertOne({_id:1,"Name":"Chris",Age:21});
{ "acknowledged" : true, "insertedId" : 1 }
> db.demo340.insertOne({_id:2,"Name":"David",Age:23});
{ "acknowledged" : true, "insertedId" : 2 }
> db.demo340.insertOne({_id:3,"Name":"Bob",Age:20});
{ "acknowledged" : true, "insertedId" : 3 }
> db.demo340.insertOne({_id:4,"Name":"Sam",Age:19});
{ "acknowledged" : true, "insertedId" : 4 }

find()로 전체 문서 확인하기

find() 메서드를 사용하면 컬렉션의 모든 문서를 확인할 수 있습니다.

> db.demo340.find();

이 쿼리는 다음과 같은 출력을 생성합니다.

{ "_id" : 1, "Name" : "Chris", "Age" : 21 }
{ "_id" : 2, "Name" : "David", "Age" : 23 }
{ "_id" : 3, "Name" : "Bob", "Age" : 20 }
{ "_id" : 4, "Name" : "Sam", "Age" : 19 }

보시다시피 find()는 여러 문서를 담은 목록 형태로 결과를 반환합니다. 이것이 바로 findById 사용 시 목록이 반환되는 이유입니다.

findOne()으로 단일 문서 조회하기

이제 _id를 기준으로 단일 문서만 가져오는 findOne() 쿼리를 살펴보겠습니다.

> db.demo340.findOne({_id:1});

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

{ "_id" : 1, "Name" : "Chris", "Age" : 21 }

find()와 findOne()의 차이점 정리

  • find(): 조건에 일치하는 모든 문서를 커서(cursor) 형태로 반환하며, 결과가 하나여도 목록처럼 처리됩니다.
  • findOne(): 조건에 일치하는 첫 번째 문서 하나만 단일 객체로 반환합니다.

따라서 MongoDB에서 ID로 조회할 때 반드시 하나의 문서만 필요하다면, find() 대신 findOne()을 사용하는 것이 코드도 더 간결하고 의도도 명확하게 드러나는 좋은 방법입니다.