MongoDB とドライバー
定義
db.collection.countDocuments(query, options)コレクションまたはビューのクエリに一致するドキュメントの数を整数で返します。このメソッドはトランザクションで使用できます。
互換性
このメソッドは、次の環境でホストされている配置で使用できます。
- MongoDB Atlas: The fully managed service for MongoDB deployments in the cloud
注意
This command is supported in all MongoDB Atlas clusters. For information on Atlas support for all commands, see Unsupported Commands.
MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン
MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン
構文
countDocuments()メソッドの形式は次のとおりです。
db.collection.countDocuments( <query>, <options> )
パラメーター
countDocuments() メソッドは次のパラメータを取ります。
Parameter | タイプ | 説明 |
|---|---|---|
クエリ | ドキュメント | The query selection criteria. To count all documents, specify an empty document. See also Query Restrictions. |
options | ドキュメント | 任意。カウント動作に影響を与える追加のオプション。 |
optionsドキュメントには以下の内容を含めることができます。
フィールド | タイプ | 説明 |
|---|---|---|
| integer | 任意。カウントするドキュメントの最大数。 |
| integer | 任意。カウントする前にスキップするドキュメントの数。 |
| 文字列またはドキュメント | 任意。クエリに使用するインデックス名またはインデックス仕様。 |
| integer | 任意。カウントの実行を許可する最大時間。 |
動作
Mechanics
db.collection.count() とは異なり、countDocuments() はカウントを返すためにメタデータを使用することはありません。代わりに、不正なシャットダウンが行われたり、シャーディングされたクラスターに孤立したドキュメントが存在したりしても、ドキュメントを集計して正確なカウントを返します。
countDocuments() は次の集計操作をラップし、n の値のみを返します。
db.collection.aggregate([ { $match: <query> }, { $group: { _id: null, n: { $sum: 1 } } } ])
空または存在しないコレクションとビュー
countDocuments() は、空または存在しないコレクションまたはビューに対して 0 を返します。
Query Restrictions
countDocuments() のクエリ式の一部として次のクエリ演算子を使用することはできません。
Restricted Operator | 代替 | |
|---|---|---|
代わりに、 | ||
代わりに、 | ||
代わりに、 |
トランザクション
countDocuments() は分散トランザクション内で使用できます。
トランザクションで countDocuments() を使用すると、結果のカウントはコミットされていないマルチドキュメントトランザクションを除外しません。
重要
ほとんどの場合、分散トランザクションでは 1 つのドキュメントの書き込み (write) よりもパフォーマンス コストが高くなります。分散トランザクションの可用性は、効果的なスキーマ設計の代わりにはなりません。多くのシナリオにおいて、非正規化されたデータモデル(埋め込みドキュメントと配列)が引き続きデータやユースケースに最適です。つまり、多くのシナリオにおいて、データを適切にモデリングすることで、分散トランザクションの必要性を最小限に抑えることができます。
トランザクションの使用に関するその他の考慮事項(ランタイム制限や oplog サイズ制限など)については、「本番環境での考慮事項」も参照してください。
クライアントの切断
countDocuments() を発行したクライアントが操作が完了する前に切断された場合、 MongoDB はkillOp を使用して countDocuments() を終了としてマークします。
例
このページの例では、sample_mflix データセット のデータを使用しています。自己管理型 MongoDB 配置にこのデータセットをロードする方法の詳細については、「サンプル データセットのロード」を参照してください。サンプル データベースに何らかの変更を加えた場合は、今ページの例を実行するには、データベースを削除して再作成する必要がある可能性があります。
コレクション内のすべてのドキュメントのカウント
moviesコレクション内のドキュメントの数をカウントするには、次の操作を使用します。
db.movies.countDocuments( { }, { hint: "_id_"} )
注意
空のクエリフィルターでdb.collection.countDocuments()を使用すると、MongoDB はコレクションのフル スキャンを実行するため、非効率的になる可能性があります。 パフォーマンスを向上させるために、この例では自動生成された_idインデックスを使用するためのhint()を指定します。 あるいは、 { "_id": { $gte: MinKey } }などのすべてのドキュメントを検索するクエリフィルターを使用して、インデックスを使用しているすべてのドキュメントをカウントすることもできます。
クエリに一致するすべての文書のカウント
以下の例では、directorsフィールドに "David Lynch" が含まれる moviesコレクション内のドキュメントの数をカウントします。
db.movies.countDocuments( { directors: "David Lynch" } )