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

count

項目一覧

  • 定義
  • 互換性
  • 構文
  • Stable API でのサポート
  • 動作
count

コレクションまたはビューに含まれるドキュメント数をカウントします。このカウントとコマンドのステータスを含むドキュメントを返します。

Tip

mongosh では、このコマンドは count() ヘルパー メソッドを通じて実行することもできます。

ヘルパー メソッドはmongoshユーザーには便利ですが、データベースコマンドと同じレベルの情報は返されない可能性があります。 便宜上必要ない場合、または追加の戻りフィールドが必要な場合は、 データベースコマンドを使用します。

注意

4.0 の機能と互換性のある MongoDB ドライバーでは、それぞれのカーソルおよびコレクション count() API(countコマンドを実行)が廃止され、代わりに countDocuments() および estimatedDocumentCount() に対応する新しい API が採用されます。特定のドライバーの具体的な API 名については、ドライバー API ドキュメントを参照してください。

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

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

重要

このコマンドは、M 0 、M 2 、および M 5クラスターで限定的にサポートされています。 詳細については、「サポートされていないコマンド 」を参照してください。

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

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

このコマンドの構文は、次のとおりです。

注意

バージョン4.2以降、 MongoDB は、 countコマンドのオプション名のより厳格な検証を実装します。 不明なオプション名を指定すると、コマンドでエラーが発生するようになりました。

db.runCommand(
{
count: <collection or view>,
query: <document>,
limit: <integer>,
skip: <integer>,
hint: <hint>,
readConcern: <document>,
maxTimeMS: <integer>,
collation: <document>,
comment: <any>
}
)

count には、次のフィールドがあります。

フィールド
タイプ
説明
count
string
カウントするコレクションまたはビューの名前。
query
ドキュメント
オプション。 コレクションまたはビューでカウントするドキュメントを選択するクエリ。
limit
integer
オプション。 返される一致するドキュメントの最大数。
skip
integer
オプション。 結果を返す前にスキップするマッチするドキュメントの数。
hint
文字列またはドキュメント
任意。使用するインデックス。 インデックス名を文字列で指定するか、インデックス仕様書を指定する。
readConcern
ドキュメント

オプション。 読み取り対象を指定します。 このオプションの構文は次のとおりです。

readConcern: { level: <value> }

次の読み取り保証レベルが利用できます。

  • "local"。これは、プライマリとセカンダリに対する読み取り操作での、デフォルトの読み取り保証レベルです。

  • "available" 。プライマリおよびセカンダリに対する読み取り操作に使用できます。"available" は、プライマリおよびシャーディングされていないセカンダリに対して "local" と同じように動作します。クエリは、インスタンスの最新データを返します。

  • "majority"WiredTiger ストレージ エンジンを使用するレプリカセットで使用できます。

  • "linearizable"primary の読み取り操作にのみ使用できます。

読み取り保証 (read concern) のレベルについて詳しくは、「読み取り保証 (read concern) レベル」を参照してください。

maxTimeMS
non-negative integer

任意。

時間制限をミリ秒単位で指定します。maxTimeMS の値を指定しない場合、操作はタイムアウトしません。値を 0 にすると、デフォルトの無制限動作を明示的に指定します。

MongoDB は、db.killOp() と同じメカニズムを使用して、割り当てられた時間制限を超えた操作を終了します。MongoDB は、指定された割り込みポイントのいずれかでのみ操作を終了します。

collation
ドキュメント

任意。

操作に使用する照合を指定します。

照合を指定すると、大文字・小文字やアクセント記号など、文字列を比較するための言語独自のルールを指定できます。

照合オプションの構文は次のとおりです。

collation: {
locale: <string>,
caseLevel: <boolean>,
caseFirst: <string>,
strength: <int>,
numericOrdering: <boolean>,
alternate: <string>,
maxVariable: <string>,
backwards: <boolean>
}

照合を指定する場合、locale フィールドは必須ですが、その他の照合フィールドはすべて任意です。フィールドの説明については、照合ドキュメントを参照してください。

照合が指定されていなくても、コレクションにデフォルトの照合が設定されている場合(db.createCollection() を参照)には、コレクションの照合が使用されます。

コレクションにも操作にも照合が指定されていない場合、MongoDB では以前のバージョンで使用されていた単純なバイナリ比較によって文字列が比較されます。

1 つの操作に複数の照合は指定できません。たとえば、フィールドごとに異なる照合を指定できません。また、ソートと検索を一度に実行する場合、検索とソートで別の照合を使用できません。

comment
any

任意。このコマンドに添付するユーザー指定のコメント。設定すると、このコメントは以下の場所にこのコマンドの記録と合わせて表示されます。

コメントには、有効な BSON 型(string, integer, object, array など)を使用できます。

MongoDB 6.0 以降では、count コマンドがStable API V1 に含まれています。Stable API で count コマンドを使用するには、MongoDB 6.0 以降を実行している配置にドライバーを接続する必要があります。

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

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

トランザクションでcountを使用すると、結果のカウントはコミットされていないマルチドキュメントトランザクションを除外しません。

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

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

このような状況を回避するには、シャーディングされたクラスターで 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 を使用して、コレクションのメタデータに基づいたおおよそのカウントを返します。

mongodWired Tiger のストレージ エンジンを使用する の不正シャットダウン後、count によって報告されるカウント統計が不正確になる可能性があります。

ドリフトの量は、チェックポイントからクリーン シャットダウンまでの間に実行された挿入、アップデート、または削除操作の数によって異なります。チェックポイントは通常、60 秒ごとに発現します。ただし、デフォルト以外の --syncdelay 設定で実行されている mongod インスタンスでは、チェックポイントの頻度が増減する可能性があります。

不正なシャットダウン後に統計を復元するには、mongod の各コレクションに対して validate を実行します。

不正なシャットダウン後:

注意

この精度の低下は、クエリ ドキュメントを含ま ないcount 操作にのみ適用されます。

MongoDB 4.2以降では、 countを発行したクライアントが操作の完了前に切断した場合、MongoDB は killOp を使用してcountを終了対象としてマークし

次のセクションでは、 countコマンドの例を示します。

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

db.runCommand( { count: 'orders' } )

結果では、カウントを表す n は、26 で、コマンド ステータス ok1 です。

{ "n" : 26, "ok" : 1 }

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

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

結果では、カウントを表す n は、13 で、コマンド ステータス ok1 です。

{ "n" : 13, "ok" : 1 }

次の操作は、ord_dt フィールドの値が Date('01/01/2012') より大きい orders コレクション内のドキュメントのカウントを返し、一致するドキュメントの最初の 10 件をスキップします。

db.runCommand( { count:'orders',
query: { ord_dt: { $gt: new Date('01/01/2012') } },
skip: 10 } )

結果では、カウントを表す n は、3 で、コマンド ステータス ok1 です。

{ "n" : 3, "ok" : 1 }

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

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

結果では、カウントを表す n は、1 で、コマンド ステータス ok1 です。

{ "n" : 1, "ok" : 1 }

デフォルトの読み取り保証 (read concern) レベル "local" を無効にするには、readConcern オプションを使用します。

レプリカセットに対する次の操作では、大多数のノードに書き込まれたことが確認されたデータの最新のコピーを読み取るために、"majority"読み取り保証を指定します。

重要

  • "majority"readConcern レベルを使用するには、空でない query 条件を指定する必要があります。

  • 読み取り保証のレベルを問わず、ノード上の最新データにシステム内のデータの最新バージョンが反映されていない場合があります。

db.runCommand(
{
count: "restaurants",
query: { rating: { $gte: 4 } },
readConcern: { level: "majority" }
}
)

単一のスレッドでそれ自体の書き込みの読み取りを可能にするには、レプリカセットのプライマリに対して "majority" 読み取り保証と "majority" 書込み保証を使用します。

戻る

集計