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

MongoDB에서 커서 값을 가져오는 방법 – hasNext()와 next() 활용 가이드

MongoDB에서 커서(cursor)는 find() 쿼리의 결과를 순차적으로 탐색할 수 있게 해주는 객체입니다. 쿼리 결과가 한 번에 모두 반환되지 않고 배치(batch) 단위로 가져오기 때문에, 대량의 데이터를 다룰 때 메모리를 효율적으로 사용할 수 있습니다.

커서 값 확인에 사용되는 메서드

커서의 값을 하나씩 가져오려면 hasNext()next() 메서드를 함께 사용합니다.

  • hasNext(): 커서에 아직 읽지 않은 문서가 남아 있는지 확인합니다. 남아 있다면 true를 반환합니다.
  • next(): 커서가 가리키는 다음 문서를 반환하고 포인터를 앞으로 이동시킵니다.

1. 샘플 컬렉션 생성

먼저 테스트용 컬렉션을 만들고 문서를 삽입해 보겠습니다.

> db.demo191.insertOne({"EmployeeId":1,"EmployeeName":"Chris Brown"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e3ad95303d395bdc21346c5")
}
> db.demo191.insertOne({"EmployeeId":2,"EmployeeName":"David Miller"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e3ad95f03d395bdc21346c6")
}
> db.demo191.insertOne({"EmployeeId":1,"EmployeeName":"John Doe"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e3ad96803d395bdc21346c7")
}
> db.demo191.insertOne({"EmployeeId":1,"EmployeeName":"John Smith"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e3ad97003d395bdc21346c8")
}

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

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

> db.demo191.find();

위 쿼리는 다음과 같은 결과를 출력합니다.

{ "_id" : ObjectId("5e3ad95303d395bdc21346c5"), "EmployeeId" : 1, "EmployeeName" : "Chris Brown" }
{ "_id" : ObjectId("5e3ad95f03d395bdc21346c6"), "EmployeeId" : 2, "EmployeeName" : "David Miller" }
{ "_id" : ObjectId("5e3ad96803d395bdc21346c7"), "EmployeeId" : 1, "EmployeeName" : "John Doe" }
{ "_id" : ObjectId("5e3ad97003d395bdc21346c8"), "EmployeeId" : 1, "EmployeeName" : "John Smith" }

3. hasNext()와 next()로 커서 값 가져오기

이제 조건에 맞는 문서만 필터링한 뒤, while 반복문과 함께 커서 객체의 값을 하나씩 출력하는 쿼리를 살펴보겠습니다.

> var cursor = db.demo191.find( { "EmployeeId":1 } );
> while (cursor.hasNext()) {
...    print(tojson(cursor.next()));
...}

실행 결과

{
   "_id" : ObjectId("5e3ad95303d395bdc21346c5"),
   "EmployeeId" : 1,
   "EmployeeName" : "Chris Brown"
}
{
   "_id" : ObjectId("5e3ad96803d395bdc21346c7"),
   "EmployeeId" : 1,
   "EmployeeName" : "John Doe"
}
{
   "_id" : ObjectId("5e3ad97003d395bdc21346c8"),
   "EmployeeId" : 1,
   "EmployeeName" : "John Smith"
}

코드 설명

위 예제의 동작 흐름은 다음과 같습니다.

  1. db.demo191.find({ "EmployeeId": 1 })로 EmployeeId가 1인 문서만 담은 커서를 생성합니다.
  2. cursor.hasNext()가 true를 반환하는 동안 while 반복문이 계속 실행됩니다.
  3. cursor.next()로 다음 문서를 가져오고, tojson()을 통해 보기 좋게 JSON 형식으로 출력합니다.

이처럼 hasNext()next()를 조합하면 MongoDB 커서의 값을 안전하게 순회하며 처리할 수 있습니다. 대량의 데이터를 반복 처리할 때 유용하게 활용할 수 있는 기본 패턴이니 꼭 기억해 두세요.