Docs Menu
Docs Home
/ / /
Kotlin コルーチン
/

ドキュメントをカウント

MongoCollectionクラスには、コレクション内のドキュメント数をカウントするために呼び出しできる 2 つのインスタンス メソッドがあります。

  • countDocuments() は、指定されたクエリに一致するコレクション内のドキュメントの数の正確な数を返します。 空のクエリフィルターを指定すると、メソッドはコレクション内のドキュメントの総数を返します。

  • estimatedDocumentCount() は、コレクションのメタデータに基づいて、コレクション内のドキュメントの数の推定値を返します。 このメソッドを使用する場合、クエリを指定することはできません。

estimatedDocumentCount()メソッドは、コレクション全体をスキャンするのではなく、コレクションのメタデータを使用するため、 countDocuments()メソッドよりも速く返します。 countDocuments()メソッドはドキュメントの数の正確なカウントを返し、フィルターの指定をサポートします。

Tip

countDocuments()を使用してコレクション内のドキュメントの合計数を返す場合、コレクションスキャンを回避してパフォーマンスを向上できます。 そのためには、 ヒントを使用して_idフィールドの組み込みインデックスを活用します。 この手法は、空のクエリ パラメータを使用してcountDocuments()を呼び出す場合にのみ使用します。

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

countDocuments()メソッドを呼び出すときは、任意でクエリフィルターパラメータを渡すことができます。 estimatedDocumentCount()を呼び出すときにパラメータを渡すことはできません。

重要

Stable API V1 と MongoDB Server の問題

Stable API V1を「strict」オプションとともに使用し、かつ MongoDB サーバー バージョン 5.0.0 から 5.0.8 までの場合、サーバーのバグが原因でestimatedDocumentCount()へのメソッド呼び出しでエラーが発生する可能性があります。

この問題を回避するには、MongoDB サーバー 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 ドキュメントを参照してください。

戻る

変更の監視