흐름에서 데이터 액세스
개요
이 가이드에서는 MongoDB Kotlin 드라이버와 함께 Flow
를 사용하여 데이터에 액세스하는 방법을 배울 수 있습니다.
Flow
은(는) Kotlin 코루틴에 내장된 데이터 유형으로, 비동기적으로 계산되는 값의 스트림을 나타냅니다. 코틀린 코루틴 드라이버는 흐름을 사용하여 데이터베이스 읽기 작업의 결과를 나타냅니다.
This page uses an initiating method, find()
to show how to 액세스 data from a 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 문서를 참조하세요.