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

MongoDB에서 커서를 반복하며 문서를 출력하는 방법

MongoDB에서 커서(cursor)를 반복(iterate)하면서 문서를 출력하려면 printjson() 함수를 사용하면 됩니다. 이 글에서는 컬렉션 생성부터 커서 반복 출력까지 단계별로 살펴보겠습니다.

1. 샘플 컬렉션 및 문서 생성

먼저 insertOne() 메서드를 사용해 cursorDemo라는 컬렉션에 학생 문서들을 추가합니다.

> db.cursorDemo.insertOne({"StudentFullName":"John Smith","StudentAge":23});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cc7f0d08f9e6ff3eb0ce442")
}
> db.cursorDemo.insertOne({"StudentFullName":"John Doe","StudentAge":21});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cc7f0df8f9e6ff3eb0ce443")
}
> db.cursorDemo.insertOne({"StudentFullName":"Carol Taylor","StudentAge":20});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cc7f0eb8f9e6ff3eb0ce444")
}
> db.cursorDemo.insertOne({"StudentFullName":"Chris Brown","StudentAge":24});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cc7f0f88f9e6ff3eb0ce445")
}

2. find() 메서드로 전체 문서 조회

컬렉션의 모든 문서를 확인하려면 find() 메서드와 함께 pretty()를 사용합니다. pretty()는 결과를 보기 좋게 정렬된 형태로 표시해 줍니다.

> db.cursorDemo.find().pretty();

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

{
   "_id" : ObjectId("5cc7f0d08f9e6ff3eb0ce442"),
   "StudentFullName" : "John Smith",
   "StudentAge" : 23
}
{
   "_id" : ObjectId("5cc7f0df8f9e6ff3eb0ce443"),
   "StudentFullName" : "John Doe",
   "StudentAge" : 21
}
{
   "_id" : ObjectId("5cc7f0eb8f9e6ff3eb0ce444"),
   "StudentFullName" : "Carol Taylor",
   "StudentAge" : 20
}
{
   "_id" : ObjectId("5cc7f0f88f9e6ff3eb0ce445"),
   "StudentFullName" : "Chris Brown",
   "StudentAge" : 24
}

3. printjson()으로 커서 반복 출력하기

이제 핵심인 printjson()을 활용한 방법입니다. forEach() 메서드에 printjson을 인자로 전달하면, 커서가 각 문서를 하나씩 순회하면서 JSON 형식으로 출력합니다.

> db.cursorDemo.find().forEach(printjson);

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

{
   "_id" : ObjectId("5cc7f0d08f9e6ff3eb0ce442"),
   "StudentFullName" : "John Smith",
   "StudentAge" : 23
}
{
   "_id" : ObjectId("5cc7f0df8f9e6ff3eb0ce443"),
   "StudentFullName" : "John Doe",
   "StudentAge" : 21
}
{
   "_id" : ObjectId("5cc7f0eb8f9e6ff3eb0ce444"),
   "StudentFullName" : "Carol Taylor",
   "StudentAge" : 20
}
{
   "_id" : ObjectId("5cc7f0f88f9e6ff3eb0ce445"),
   "StudentFullName" : "Chris Brown",
   "StudentAge" : 24
}

4. 특정 필드만 선택하여 출력하기

모든 필드가 아니라 StudentFullNameStudentAge처럼 원하는 필드만 출력하고 싶다면, find()의 두 번째 인자인 프로젝션(projection) 옵션을 활용하면 됩니다. 여기서는 _id 필드를 제외하기 위해 값을 0으로 설정했습니다.

> db.cursorDemo.find({}, { "StudentFullName": 1,"StudentAge":1, "_id": 0 }).forEach(printjson)

위 쿼리의 실행 결과는 다음과 같습니다.

{ "StudentFullName" : "John Smith", "StudentAge" : 23 }
{ "StudentFullName" : "John Doe", "StudentAge" : 21 }
{ "StudentFullName" : "Carol Taylor", "StudentAge" : 20 }
{ "StudentFullName" : "Chris Brown", "StudentAge" : 24 }

정리

MongoDB에서 커서를 반복하며 문서를 출력할 때는 forEach(printjson) 조합이 가장 간편합니다. 전체 문서를 조회할 수도 있고, 프로젝션 옵션을 통해 필요한 필드만 골라서 출력할 수도 있습니다. 대량의 데이터를 다룰 때도 이 방식은 안정적으로 동작하므로, 실무에서 자주 활용되는 패턴입니다.