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

문서 수 계산

컬렉션의 문서 수를 계산하기 위해 호출할 수 있는 MongoCollection 클래스에는 두 가지 인스턴스 메서드가 있습니다.

  • countDocuments() collection에서 지정된 쿼리와 일치하는 문서 수의 정확한 개수를 반환합니다. 빈 쿼리 필터를 지정하면 메서드는 collection에 있는 총 문서 수를 반환합니다.

  • estimatedDocumentCount() 컬렉션 메타데이터를 기반으로 컬렉션 내 문서 수의 추정치를 반환합니다. 이 메서드를 사용할 때는 쿼리를 지정할 수 없습니다.

estimatedDocumentCount() 메서드는 전체 collection을 스캔하는 대신 collection의 메타데이터를 사용하기 때문에 countDocuments() 메서드보다 빠릅니다. countDocuments() 메서드는 문서 수의 정확한 개수를 반환하고 필터 지정을 지원합니다.

countDocuments() 를 사용하여 컬렉션의 총 문서 수를 반환하는 경우 컬렉션 스캔을 방지하여 성능을 향상시킬 수 있습니다. 이렇게 하려면 힌트 를 사용하여 _id 필드에 내장된 인덱스를 활용합니다. 빈 쿼리 매개 변수를 사용하여 countDocuments() 를 호출할 때만 이 기술을 사용합니다.

val options = CountOptions().hintString("_id_")
val numDocuments = collection.countDocuments(BsonDocument(), options)

countDocuments() 메서드를 호출할 때 필요에 따라 쿼리 필터 매개변수를 전달할 수 있습니다. estimatedDocumentCount()를 호출할 때는 어떤 매개변수도 전달할 수 없습니다.

중요

Stable API V1 및 MongoDB Server 이슈

"strict" 옵션과 5.0.0에서 5.0.8 사이의 MongoDB Server 버전을 사용하는 Stable API V1을 사용하는 경우 서버 버그로 인해 estimatedDocumentCount()에 대한 메서드 호출에 오류가 발생할 수 있습니다.

이 문제를 방지하려면 MongoDB Server 5.0.9로 업그레이드하거나 Stable API "strict" 옵션을 false로 설정합니다.

호출 동작을 지정하기 위해 다음 메서드 중 하나에 선택적 매개변수를 전달할 수도 있습니다.

메서드
선택적 매개변수 클래스
설명
countDocuments()
CountOptions
limit() 메서드를 사용하여 계산할 최대 문서 수를 지정하거나 maxTime() 메서드를 사용하여 최대 실행 시간을 지정할 수 있습니다.
estimatedDocumentCount()
EstimatedDocumentCountOptions
maxTime() 메서드를 사용하여 최대 실행 시간을 지정할 수 있습니다.

두 메서드 모두 일치하는 문서 수를 Long 기본으로 반환합니다.

다음 예는 sample_mflix 데이터베이스의 movies 컬렉션에 있는 문서 수를 추정하고 countries 필드에 Spain가 있는 movies 컬렉션의 정확한 문서 수를 반환합니다. 앞의 샘플 코드를 실행하면 다음과 같은 출력이 표시됩니다(정확한 숫자는 데이터에 따라 다를 수 있음).

참고

이 예시 에서는 연결 URI를 사용하여 MongoDB 인스턴스 에 연결합니다. MongoDB 인스턴스 에 연결하는 방법에 학습 보려면 연결 가이드 를 참조하세요.

import com.mongodb.MongoException
import com.mongodb.client.model.Filters
import com.mongodb.kotlin.client.coroutine.MongoClient
import kotlinx.coroutines.runBlocking
data class Movie(val countries: List<String>)
fun main() = runBlocking {
// Replace the uri string with your MongoDB deployment's connection string
val uri = "<connection string uri>"
val mongoClient = MongoClient.create(uri)
val database = mongoClient.getDatabase("sample_mflix")
val collection = database.getCollection<Movie>("movies")
val query = Filters.eq(Movie::countries.name, "Spain")
try {
val estimatedCount = collection.estimatedDocumentCount()
println("Estimated number of documents in the movies collection: $estimatedCount")
val matchingCount = collection.countDocuments(query)
println("Number of movies from Spain: $matchingCount")
} catch (e: MongoException) {
System.err.println("An error occurred: $e")
}
mongoClient.close()
}
Estimated number of documents in the movies collection: 23541
Number of movies from Spain: 755

이 페이지에 언급된 클래스 및 메서드에 대한 추가 정보는 다음 API 설명서를 참조하세요.

돌아가기

변화를 주시하세요