countDocuments() (フィルタ付きの件数カウント)
最終更新:2026-10-09
countDocuments() (フィルタ付きの件数カウント)
countDocuments() はフィルタに一致するドキュメントの件数を数えます。例: `db.users.countDocuments({ age: { $gte: 18 } })`。サーバー側で実行され、正確な件数を返します。estimatedDocumentCount() と異なり、実際にフィルタを評価するため、正確ではあるものの遅くなります。精度が重要な場合の選択肢です。巨大なコレクションでパフォーマンスが気になるクエリでは、フィルタをインデックスで支えてください。
| カテゴリ | 読み取り |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
db.<collection>.countDocuments(<filter>, { limit: <number> })
⚙️ パラメータ
| フィルター条件 | カウント対象のフィルター。空の {} はすべてを数えます。 |
|---|---|
| limit | 任意。カウントするドキュメントの上限。 |
戻り値:一致するドキュメント数(整数)。
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// countDocuments: 成人ユーザーの件数を数える
const n = db.users.countDocuments({ age: { $gte: 18 } })
print('Adults: ' + n)
出力:
Adults: 42
📌 注意事項
- フィルタを実際に評価する正確なカウント。estimatedDocumentCount より遅い
- フィルタ対象フィールドにインデックスを張り、コレクション全体のスキャンを避ける
- 空フィルタ {} を渡すとドキュメント総数を取得できる
🏷️ 関連タグ
💡 関連ケース
📚 関連チュートリアル
❓ よくある質問
QcountDocuments と estimatedDocumentCount はどう違いますか?
AcountDocuments() はフィルタを正確に評価しますが遅いです。estimatedDocumentCount() はコレクションのメタデータを使うため高速ですが概算です。
QcountDocuments でコレクション全体を数えるのが推奨されないのはなぜですか?
A一致をスキャンする必要があり、大規模コレクションでは遅いためです。おおよその数で十分な場合は estimatedDocumentCount() を使います。
QcountDocuments は一致なしで 0 を返しますか、それともエラーを投げますか?
Aエラーを投げず 0 を返します。条件式で安全に使えます。