db.collection.countDocuments()
MongoDB とドライバー
このページでは、 mongosh
メソッドについて説明します。MongoDB ドライバーで同等のメソッドを確認するには、ご使用のプログラミング言語の対応するページを参照してください。
定義
db.collection.countDocuments(query, options)
コレクションまたはビューのクエリに一致するドキュメントの数を整数で返します。 このメソッドはトランザクションで使用できます。
互換性
このメソッドは、次の環境でホストされている配置で使用できます。
MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです
注意
このコマンドは、すべての MongoDB Atlas クラスターでサポートされています。すべてのコマンドに対する Atlas のサポートについては、「サポートされていないコマンド」を参照してください。
MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン
MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン
構文
countDocuments()
メソッドの形式は次のとおりです。
db.collection.countDocuments( <query>, <options> )
countDocuments()
メソッドは次のパラメーターを取ります。
Parameter | タイプ | 説明 |
---|---|---|
クエリ | ドキュメント | クエリの選択基準。すべてのドキュメントをカウントするには、空のドキュメントを指定します。「クエリの制限」も参照してください。 |
options | ドキュメント | 任意。カウント動作に影響を与える追加のオプション。 |
options
ドキュメントには以下の内容を含めることができます。
フィールド | タイプ | 説明 |
---|---|---|
limit | integer | 任意。カウントするドキュメントの最大数。 |
skip | integer | 任意。カウントする前にスキップするドキュメントの数。 |
hint | 文字列またはドキュメント | 任意。クエリに使用するインデックス名またはインデックス仕様。 |
maxTimeMS | integer | 任意。カウントの実行を許可する最大時間。 |
動作
Mechanics
db.collection.count()
とは異なり、db.collection.countDocuments()
はカウントを返すためにメタデータを使用することはありません。代わりに、不正なシャットダウンが行われたり、シャーディングされたクラスターに孤立したドキュメントが存在したりしても、ドキュメントを集計して正確なカウントを返します。
db.collection.countDocuments()
は次の集計操作をラップし、n
の値のみを返します。
db.collection.aggregate([ { $match: <query> }, { $group: { _id: null, n: { $sum: 1 } } } ])
空または存在しないコレクションとビュー
db.collection.countDocuments()
は、空または存在しないコレクションまたはビューに対して0
を返します。
Query Restrictions
db.collection.countDocuments()
のクエリ式の一部として次のクエリ演算子を使用することはできません。
Restricted Operator | 代替 | |
---|---|---|
代わりに、 $expr を使用してください。 | ||
代わりに、
| ||
代わりに、
|
トランザクション
db.collection.countDocuments()
は分散トランザクション内で使用できます。
トランザクションでdb.collection.countDocuments()
を使用すると、結果のカウントはコミットされていないマルチドキュメントトランザクションを除外しません。
重要
ほとんどの場合、分散トランザクションでは 1 つのドキュメントの書き込み (write) よりもパフォーマンス コストが高くなります。分散トランザクションの可用性は、効果的なスキーマ設計の代わりにはなりません。多くのシナリオにおいて、非正規化されたデータモデル(埋め込みドキュメントと配列)が引き続きデータやユースケースに最適です。つまり、多くのシナリオにおいて、データを適切にモデリングすることで、分散トランザクションの必要性を最小限に抑えることができます。
トランザクションの使用に関するその他の考慮事項(ランタイム制限や oplog サイズ制限など)については、「本番環境での考慮事項」も参照してください。
クライアントの切断
MongoDB 4.2以降では、 db.collection.countDocuments()
を発行したクライアントが操作の完了前に切断した場合、MongoDB は killOp
を使用してdb.collection.countDocuments()
を終了対象としてマークし 。
例
コレクション内のすべてのドキュメントのカウント
orders
コレクション内のドキュメントの数をカウントするには、次の操作を使用します。
db.orders.countDocuments( {}, { hint: "_id_"} )
注意
空のクエリフィルターでdb.collection.countDocuments()
を使用すると、MongoDB はコレクションのフル スキャンを実行するため、非効率的になる可能性があります。 パフォーマンスを向上させるために、この例では自動生成された_id
インデックスを使用するためのhint()
を指定します。 あるいは、 { "_id": { $gte: MinKey } }
などのすべてのドキュメントを検索するクエリフィルターを使用して、インデックスを使用しているすべてのドキュメントをカウントすることもできます。
クエリに一致するすべての文書のカウント
orders
コレクション内のフィールド ord_dt
が new
Date('01/01/2012')
より大きいドキュメントの数をカウントします。
db.orders.countDocuments( { ord_dt: { $gt: new Date('01/01/2012') } }, { limit: 100 } )