문서 메뉴
문서 홈
/ / /
Kotlin Sync 드라이버
/

커서에서 데이터 액세스

이 페이지의 내용

  • 개요
  • 반복적으로 커서 내용에 액세스
  • 문서 개별 조회
  • 모든 문서 검색
  • 맞춤형 커서
  • 문제 해결
  • API 문서

이 가이드에서는 Kotlin 동기화 드라이버를 사용하여 커서 에서 데이터에 액세스하는 방법을 배울 수 있습니다.

커서는 읽기 작업의 결과를 반복 가능한 배치로 반환하는 메커니즘입니다. 커서는 주어진 시간에 문서의 하위 집합만 보유하므로 커서는 메모리 소비와 드라이버가 서버에 보내는 요청 수를 모두 줄여줍니다.

Kotlin Sync 드라이버가 여러 문서를 반환하는 읽기 작업을 수행할 때마다 커서에 해당 문서가 자동으로 반환됩니다.

이 가이드의 예제에서는 Atlas 샘플 데이터 세트sample_restaurants 데이터베이스에 있는 restaurants 컬렉션을 사용합니다. 무료 MongoDB Atlas 클러스터를 생성하고 샘플 데이터 세트를 로드하는 방법을 알아보려면 Atlas 시작하기 가이드를 참조하세요.

다음 Kotlin 데이터 클래스는 이 컬렉션의 문서를 모델링합니다.

data class Restaurant(
@BsonId
val id: ObjectId,
val name: String
)

커서의 내용을 반복하려면 다음 예제와 같이 forEach() 메서드를 사용합니다.

val results = collection.find()
results.forEach { result ->
println(result)
}

또는 use() 메서드를 사용하여 커서에 루프를 구현합니다.

val results = collection.find()
results.cursor().use { cursor ->
while (cursor.hasNext()) {
println(resultCursor.next())
}
}

참고

기본적으로 MongoDB는 클라이언트가 커서의 모든 결과를 소진하면 커서를 닫습니다. 이 가이드의 예에서는 close() 메서드를 사용하여 커서를 명시적으로 닫습니다.

next() 메서드를 호출하여 커서에서 문서를 개별적으로 검색합니다.

다음 예에서는 컬렉션에서 name 값이 "Dunkin' Donuts" 인 모든 문서를 찾습니다. 그런 다음 next() 메서드를 호출하여 커서의 첫 번째 문서를 인쇄합니다.

val results = collection
.find<Restaurant>(eq(Restaurant::name.name, "Dunkin' Donuts"))
results.cursor().use { cursor ->
println(if (cursor.hasNext()) cursor.next()
else "No document matches the filter")
}

경고

쿼리에서 반환되는 문서의 수와 크기가 사용 가능한 애플리케이션 메모리를 초과하면 프로그램이 충돌합니다. 큰 결과 세트가 예상되는 경우 커서에 반복적으로 액세스합니다.

커서에서 모든 문서를 검색하려면 다음 예와 같이 커서를 List 로 변환합니다.

val results = collection.find<Restaurant>(eq(Restaurant::name.name, "Dunkin' Donuts"))
val resultsList = results.toList()
for (result in resultsList) {
println(result)
}

고정 사이즈 컬렉션 을 쿼리할 때 클라이언트가 커서에서 결과를 모두 사용한 후에도 계속 열려 있는 테일 커서( tailable cursor )를 사용할 수 있습니다. 고정 사이즈 컬렉션을 사용하여 테일 커서(tailable cursor)를 만들려면 FindIterable 객체의 cursorType 메서드에 CursorType.TailableAwait 를 지정합니다.

다음 예제에서는 고정 사이즈 컬렉션에 테일 커서(tailable cursor)를 생성합니다.

val results = collection.find<Document>().cursorType(CursorType.TailableAwait)

테일 커서(tailable cursor) 및 사용법에 대해 자세히 알아보려면 MongoDB 서버 매뉴얼의 테일 커서(tailable cursor) 가이드 를 참조하세요.

MongoDB의 커서는 아무런 작업도 수행되지 않은 상태에서 오랫동안 열려 있는 경우 서버에서 시간 초과가 발생할 수 있습니다. 이로 인해 커서를 반복하려고 할 때 CursorNotFound 예외가 발생할 수 있습니다.

이 가이드에서 사용되는 메서드 또는 유형에 대해 자세히 알아보려면 다음 API 설명서를 참조하세요.

돌아가기

고유 필드 값 검색

다음

데이터 변경 사항 모니터링