MongoCollectionクラスには、コレクション内のドキュメント数をカウントするために呼び出しできる 2 つのインスタンス メソッドがあります。
countDocuments()は、指定されたクエリに一致するコレクション内のドキュメントの数の正確な数を返します。 空のクエリフィルターを指定すると、メソッドはコレクション内のドキュメントの総数を返します。estimatedDocumentCount()は、コレクションのメタデータに基づいて、コレクション内のドキュメントの数の推定値を返します。 このメソッドを使用する場合、クエリを指定することはできません。
estimatedDocumentCount()メソッドは、コレクション全体をスキャンするのではなく、コレクションのメタデータを使用するため、 countDocuments()メソッドよりも速く返します。 countDocuments()メソッドはドキュメントの数の正確なカウントを返し、フィルターの指定をサポートします。
Tip
countDocuments()を使用してコレクション内のドキュメントの合計数を返す場合、コレクションスキャンを回避してパフォーマンスを向上できます。 そのためには、 ヒントを使用して_idフィールドの組み込みインデックスを活用します。 この手法は、空のクエリ パラメータを使用してcountDocuments()を呼び出す場合にのみ使用します。
val options = CountOptions().hintString("_id_") val numDocuments = collection.countDocuments(BsonDocument(), options)
countDocuments()メソッドを呼び出すときは、任意でクエリフィルターパラメータを渡すことができます。 estimatedDocumentCount()を呼び出すときにパラメータを渡すことはできません。
これらのメソッドのいずれかに任意のパラメーターを渡して、呼び出しの動作を指定することもできます。
方式 | 任意のパラメーター クラス | 説明 |
|---|---|---|
|
| 次のオプションを設定できます。
|
|
|
|
どちらの方法も、一致するドキュメントの数を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 ドキュメントを参照してください。