Docs Menu
Docs Home
/ / /
Kotlin 코루틴
/ / /

흐름에서 데이터 액세스

이 페이지의 내용

  • 개요
  • 터미널 메서드
  • 첫 번째 문서 찾기
  • 결과 수 계산
  • 결과를 목록으로 변환
  • 결과 반복
  • 쿼리 설명

이 가이드에서는 MongoDB Kotlin 드라이버와 함께 Flow 를 사용하여 데이터에 액세스하는 방법을 배울 수 있습니다.

Flow 은(는) Kotlin 코루틴에 내장된 데이터 유형으로, 비동기적으로 계산되는 값의 스트림을 나타냅니다. 코틀린 코루틴 드라이버는 흐름을 사용하여 데이터베이스 읽기 작업의 결과를 나타냅니다.

이 페이지에서는find() 시작 메서드를 사용하여 FindFlow 에서 데이터에 액세스 하는 방법을 보여 줍니다.

참고

데이터에 액세스하고 저장하는 다음 방법은 AggregateFlow와 같은 다른 이터러블에도 적용됩니다.

find() 메서드는 FindFlow 인스턴스를 만들고 반환합니다. FindFlow 를 사용하면 Atlas Search 기준과 일치하는 문서를 찾아보고 메서드를 통해 매개변수를 설정하여 표시할 문서를 추가로 지정할 수 있습니다.

터미널 메서드는 작업을 제어하는 Flow 인스턴스의 모든 매개변수를 구성한 후 MongoDB Server에서 작업을 실행합니다.

firstOrNull() 쿼리 결과에서 첫 번째 문서를 조회하려면 메서드를 사용하고,null 결과가 없는 경우 메서드를 사용합니다.

val resultsFlow = collection.find()
val firstResultOrNull = resultsFlow.firstOrNull()

또는 first() 메서드를 사용하여 쿼리에서 첫 번째 문서를 조회하거나 결과가 없는 경우 NoSuchElementException 을 발생시킬 수 있습니다.

try {
val resultsFlow = collection.find()
val firstResult = resultsFlow.first()
} catch (e: NoSuchElementException) {
println("No results found")
}

이러한 메서드는 고유 인덱스로 필터링할 때와 같이 쿼리 필터가 하나의 문서와 일치할 때 자주 사용됩니다.

count() 메서드를 사용하여 쿼리에서 결과 수를 검색합니다.

val resultsFlow = collection.find()
val count = resultsFlow.count()

toList() 메서드를 사용하여 쿼리 결과를 List 에 저장합니다.

val resultsFlow = collection.find()
val results = resultsFlow.toList()

이 메서드는 쿼리 필터가 사용 가능한 메모리에 들어갈 수 있는 적은 수의 문서를 반환할 때 자주 사용됩니다.

collect() 메서드를 사용하여 가져온 문서를 반복하고 조기 종료 시 흐름이 닫히도록 합니다.

val resultsFlow = collection.find()
resultsFlow.collect { println(it) }

explain() 메서드를 사용하여 MongoDB가 작업을 실행하는 방법에 대한 정보를 볼 수 있습니다.

explain() 메서드는 실행 계획 및 성능 통계를 반환합니다. 실행 계획은 MongoDB가 작업을 완료할 수 있는 잠재적인 방법입니다. explain() 메서드는 성공적인 계획(MongoDB가 실행한 계획)과 거부된 계획을 모두 제공합니다.

explain() 메소드에 상세 수준을 전달하여 설명의 세부 정보 수준을 지정할 수 있습니다.

다음 표에는 설명 및 해당 사용 사례에 대한 모든 상세 수준이 나와 있습니다.

상세도 수준
사용 사례
ALL_PLANS_EXECUTIONS
쿼리를 실행하기 위해 MongoDB가 어떤 계획을 선택할지 알고 싶습니다.
EXECUTION_STATS
쿼리가 잘 수행되고 있는지 알고 싶습니다.
QUERY_PLANNER
쿼리에 문제가 있으며 문제를 진단하기 위해 가능한 한 많은 정보를 원합니다.

다음 예제에서는 실행 계획을 생성하는 애그리게이션 단계에 대한 성공적인 계획의 JSON 표현을 출력합니다.

val explanation = collection.find().explain(ExplainVerbosity.EXECUTION_STATS)
val jsonSummary = explanation.getEmbedded(
listOf("queryPlanner", "winningPlan"),
Document::class.java
).toJson()
println(jsonSummary)
{ "stage": "COLLSCAN", "direction": "forward" }

explain 작업에 대한 자세한 내용은 다음 서버 매뉴얼 항목을 참조하세요.

  • 설명 출력

  • 쿼리 계획

이 섹션에 언급된 메서드 및 클래스에 대한 자세한 내용은 다음 API 문서를 참조하세요.

돌아가기

Retrieve Data