Docs Menu
Docs Home
/
MongoDB マニュアル
/ / /

cursor.count()

項目一覧

  • 定義
  • 動作
cursor.count()

重要

mongosh メソッド

これは mongoshメソッドです。 これは、 Node.jsまたはその他のプログラミング言語固有のドライバー メソッドのドキュメントではありません

ほとんどの場合、 mongoshメソッドはレガシーの mongo shell メソッドと同じように動作します。 ただし、一部のレガシー メソッドはmongoshでは利用できません。

レガシーmongo shell のドキュメントについては、対応する MongoDB Server リリースのドキュメントを参照してください。

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

注意

バージョン 4.0 の機能と互換性のある MongoDB ドライバーは、それぞれのカーソルとコレクション count() API を廃止し、countDocuments()estimatedDocumentCount() の新しい API を採用します。特定のドライバーの特定の API 名については、ドライバー API ドキュメントを参照してください。

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

重要

  • count()find()操作がクエリ述語なしで実行される場合は、 の使用を避けます。クエリ述語がない場合、これらのcount() はコレクションのメタデータに基づいて結果を返します。その結果、おおよそのカウントが返される可能性があります。特に、

    • シャーディングされたクラスターでは、結果のカウントで孤立したドキュメントが正しく除外されません。

    • 不正なシャットダウンの後は、カウントが不正確になる可能性があります。

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

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

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

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

Parameter
タイプ
説明
applySkipLimit
ブール値
任意。 カウントにおいて、 cursor.skip() } メソッドとcursor.limit()メソッドの影響を考慮するかどうかを指定します。 デフォルトでは、 count()メソッドはcursor.skip()cursor.limit()の効果を無視します。 これらのメソッドの効果を考慮するには、 applySkipLimittrueを設定します。

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

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

Tip

以下も参照してください。

トランザクション では、 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

項目一覧