Docs Menu
Docs Home
/
データベース マニュアル
/ / /

cursor.count()(mongoshメソッド)

cursor.count()

重要

mongosh メソッド

このページでは、 mongosh メソッドが文書化されます。これは Node.js などの言語固有のドライバーのドキュメントではありません

MongoDB API ドライバーについては、各言語の MongoDB ドライバー ドキュメントを参照してください。

注意

MongoDBドライバーは、それぞれのカーソルとコレクションcount() API を廃止し、代わりに countDocuments()estimatedDocumentCount() に対応する新しい API を採用します。各ドライバーの特定のAPI名については、ドライバーAPIドキュメントを参照してください。

カーソルが参照するドキュメントの数をカウントします。 一致するドキュメントの数を返すには、 count()メソッドを find()クエリに追加します。 この操作はクエリを実行せず、代わりにクエリによって返される結果をカウントします。

count() メソッドのプロトタイプ形式は次のとおりです。

db.collection.find(<query>).count()

count()メソッドには次のパラメーターがあります。

Parameter
タイプ
説明

applySkipLimit

ブール値

任意。 mongoshは、このオプションに設定した値を無視します。 この値のデフォルトはtrueです。

オプションは、カウントにおいてcursor.skip() メソッドとcursor.limit() メソッドの影響を考慮するかどうかを指定します。デフォルトでは 、count() メソッドはcursor.skip()cursor.limit() の影響を無視します。これらのメソッドの効果を考慮するには、applySkipLimittrue に設定する必要があります。

現在非推奨となっているレガシーmongo shell では、このオプションに 設定が使用されていました。

MongoDB は、db.collection.find(<query>).count() 構造の代替として同等の db.collection.count() も提供します。

MongoDB は、hint() でのcount() の使用をサポートしています。例については、「使用するインデックスの指定」参照してください。

Tip

このメソッドは、次の環境でホストされている配置で使用できます。

  • MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです

注意

このコマンドは、すべての MongoDB Atlas クラスターでサポートされています。すべてのコマンドに対する Atlas のサポートについては、「サポートされていないコマンド」を参照してください。

  • MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン

  • MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン

クエリ述語を指定しない find() 操作で count() を呼び出すと、count() メソッドは不正確なドキュメントのカウントを返す可能性があります。これらの count() メソッドはコレクションのメタデータに基づいて結果を返します。その結果、おおよそのカウントが返される場合があります。特に、

コレクション メタデータに基づくカウントについては、「count オプション付きの CollStats パイプライン ステージ」も参照してください。

トランザクション では、 countとshelldb.collection.count() ヘルパーcount() と を使用できません。

詳細については、「トランザクションとカウント操作」を参照してください。

シャーディングされたクラスターでは、 にクエリ述語がないcount() によって、find 孤立したドキュメント が存在する場合や チャンク移行 が進行中の場合に、 不正確な カウントが発生する可能性があります。

このような状況を回避するには、シャーディングされたクラスターで db.collection.aggregate() メソッドを使用します。

$count ステージを使用してドキュメントをカウントできます。たとえば、次の操作はコレクション内のドキュメントをカウントします。

db.collection.aggregate( [
{ $count: "myCount" }
])

$count ステージは、次の$group + $project シーケンスと同等です。

db.collection.aggregate( [
{ $group: { _id: null, count: { $sum: 1 } } },
{ $project: { _id: 0 } }
] )

Tip

$collStats を使用して、コレクションのメタデータに基づいたおおよそのカウントを返します。

次のようなインデックスを持つコレクションを考えてみましょう。

{ a: 1, b: 1 }

カウントを実行するときに、MongoDB は次の場合にインデックスのみを使用してカウントを返すことができます。

  • クエリがインデックスを使用できる、

  • クエリにはインデックスのキーに対する条件のみが含まれており、かつ

  • クエリ述語が、インデックス キーの単一の連続した範囲にアクセスする。

たとえば、次の操作では、インデックスのみを使用してカウントを返すことができます。

db.collection.find( { a: 5, b: 5 } ).count()
db.collection.find( { a: { $gt: 5 } } ).count()
db.collection.find( { a: 5, b: { $gt: 10 } } ).count()

ただし、クエリでインデックスを使用できるが、クエリ述語が単一の連続した範囲のインデックス キーにアクセスしない場合、またはクエリにインデックス外のフィールドに関する条件が含まれている場合は、MongoDB はインデックスを使用するだけでなく、ドキュメントも読み取ってカウントを返す必要があります。

db.collection.find( { a: 5, b: { $in: [ 1, 2, 3 ] } } ).count()
db.collection.find( { a: { $gt: 5 }, b: 5 } ).count()
db.collection.find( { a: 5, b: 5, c: 5 } ).count()

このような場合、MongoDB はドキュメントの最初の読み取り中にドキュメントをメモリにページングすることで、後続の同じカウント操作の呼び出しのパフォーマンスを向上させます。

以下はcount()メソッドの例です。

次の操作は、orders コレクション内のすべてのドキュメントの数をカウントします。

db.orders.find().count()

次の操作では、フィールド ord_dtnew Date('01/01/2012') より大きい orders コレクション内のドキュメントの数をカウントします。

db.orders.find( { ord_dt: { $gt: new Date('01/01/2012') } } ).count()

次の操作は、limit(5) の影響を考慮して、フィールド ord_dtnew Date('01/01/2012') より大きい orders コレクション内のドキュメントの数をカウントします。

db.orders.find( { ord_dt: { $gt: new Date('01/01/2012') } } ).limit(5).count(true)

次の操作では、{ status: 1 } というインデックスキー仕様を持つ "status_1" というインデックスを使用して、orders コレクション内のフィールド ord_dtnew Date('01/01/2012') より大きく、status フィールドが "D" に等しいドキュメントのカウントを返します。

db.orders.find(
{ ord_dt: { $gt: new Date('01/01/2012') }, status: "D" }
).hint( "status_1" ).count()

戻る

cursor.comment

項目一覧