db.collection.find()의 반환 유형
MongoDB에서 db.collection.find() 구문은 쿼리 결과 집합(result set)에 대한 커서(cursor)를 반환합니다. 즉, find()는 문서 자체를 직접 돌려주는 것이 아니라, 결과 집합을 가리키는 커서 객체를 반환하며, 이 커서를 통해 결과를 하나씩 순회(iterate)하거나 전체 문서를 출력할 수 있습니다.
커서 방식을 사용하는 이유는 대량의 데이터를 한 번에 메모리에 로드하지 않고 배치(batch) 단위로 효율적으로 처리하기 위함입니다. 기본적으로 셸에서는 처음 20개의 문서를 표시하고, 이후 it 명령으로 나머지를 계속 확인할 수 있습니다.
예제용 컬렉션 생성하기
먼저 문서를 포함하는 컬렉션을 생성해 보겠습니다.
> db.findCursorDemo.insertOne({"ClientFirstName":"John","ClientLastName":"Smith"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd00a1c588d4a6447b2e05c")
}
> db.findCursorDemo.insertOne({"ClientFirstName":"Carol","ClientLastName":"Taylor"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd00a26588d4a6447b2e05d")
}
> db.findCursorDemo.insertOne({"ClientFirstName":"David","ClientLastName":"Miller"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd00a33588d4a6447b2e05e")
}위 명령을 실행하면 findCursorDemo 컬렉션에 세 개의 클라이언트 문서가 저장됩니다.
find() 메서드로 전체 문서 조회하기
다음은 find() 메서드를 사용하여 컬렉션의 모든 문서를 조회하는 쿼리입니다.
> db.findCursorDemo.find();
이 쿼리는 다음과 같은 결과를 출력합니다.
{ "_id" : ObjectId("5cd00a1c588d4a6447b2e05c"), "ClientFirstName" : "John", "ClientLastName" : "Smith" }
{ "_id" : ObjectId("5cd00a26588d4a6447b2e05d"), "ClientFirstName" : "Carol", "ClientLastName" : "Taylor" }
{ "_id" : ObjectId("5cd00a33588d4a6447b2e05e"), "ClientFirstName" : "David", "ClientLastName" : "Miller" }반환된 커서 활용하기
find()가 반환한 커서에는 다양한 메서드를 적용할 수 있습니다. 예를 들어 forEach()를 사용하면 각 문서에 대해 원하는 작업을 수행할 수 있습니다.
> var myCursor = db.findCursorDemo.find();
> myCursor.forEach(function(doc){
... print(doc.ClientFirstName + " " + doc.ClientLastName);
... });
John Smith
Carol Taylor
David Miller또한 hasNext()와 next() 메서드를 조합하면 커서를 직접 제어하면서 문서를 하나씩 처리할 수 있으며, toArray()를 사용하면 커서의 결과를 배열 형태로 변환할 수도 있습니다.
정리
db.collection.find()의 반환 유형은 커서(cursor)입니다. 이 커서는 쿼리 결과 집합에 대한 참조 역할을 하며, 순회, 필터링, 정렬 등 다양한 후속 작업의 출발점이 됩니다. MongoDB에서 데이터를 효율적으로 조회하고 처리하려면 커서의 동작 방식을 정확히 이해하는 것이 중요합니다.