Docs Menu
Docs Home
/ / /
Java 同期
/

ドキュメントをカウント

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

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

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

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

Tip

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

CountOptions opts = new CountOptions().hintString("_id_");
long numDocuments = collection.countDocuments(new BsonDocument(), opts);

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

重要

Stable API V1 と MongoDB Server の問題

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

この問題を回避するには、MongoDB Server 5.0.9 にアップグレードするか、Stable API の「strict」オプションをfalseに設定します。

これらのメソッドのいずれかに任意のパラメーターを渡して、呼び出しの動作を指定することもできます。

方式
任意のパラメーター クラス
説明
countDocuments()
CountOptions
カウントするドキュメントの最大数を指定するにはlimit()メソッドを使用するか、最大実行時間数を指定するにはmaxTime()メソッドを使用します。
estimatedDocumentCount()
EstimatedDocumentCountOptions
maxTime()メソッドを使用して最大実行時間を指定できます。

どちらの方法も、一致するドキュメントの数をlongプリミティブとして返します。

次の例では、sample_mflix データベース内の movies コレクション内のドキュメントの数が推定され、その後movies コレクション内のcountries フィールドに Canada が含まれるドキュメントの正確な数が返されます。

注意

この例では、接続 URI を使用して MongoDB のインスタンスに接続します。 MongoDB インスタンスへの接続の詳細については、「 接続ガイド 」を参照してください。

// Runs count operations on a collection by using the Java driver
package usage.examples;
import static com.mongodb.client.model.Filters.eq;
import org.bson.Document;
import org.bson.conversions.Bson;
import com.mongodb.MongoException;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
public class CountDocuments {
public static void main(String[] args) {
// Replace the uri string with your MongoDB deployment's connection string
String uri = "<connection string uri>";
try (MongoClient mongoClient = MongoClients.create(uri)) {
MongoDatabase database = mongoClient.getDatabase("sample_mflix");
MongoCollection<Document> collection = database.getCollection("movies");
Bson query = eq("countries", "Spain");
try {
// Retrieves and prints the estimated number of documents in the collection
long estimatedCount = collection.estimatedDocumentCount();
System.out.println("Estimated number of documents in the movies collection: " + estimatedCount);
// Retrieves and prints the number of documents with a "countries" value of "Spain"
long matchingCount = collection.countDocuments(query);
System.out.println("Number of movies from Spain: " + matchingCount);
// Prints a message if any exceptions occur during the operations
} catch (MongoException me) {
System.err.println("An error occurred: " + me);
}
}
}
}

上記のサンプル コードを実行すると、次のような出力が表示されます(正確な数値はデータによって異なる場合があります)。

Estimated number of documents in the movies collection: 23541
Number of movies from Spain: 755

Tip

Legacy API

レガシー API を使用している場合は、 FAQ ページ を参照して、このコード例に加える必要がある変更を確認してください。

このページで言及されているクラスとメソッドについて詳しくは、次の API ドキュメントを参照してください。

戻る

変更の監視