흐름에서 데이터 액세스
개요
이 가이드에서는 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 문서를 참조하세요.