ドキュメントをカウント
Overview
このガイドでは、コレクション内のドキュメント数のの正確な推定値を取得する方法を学びます。
サンプル データ
このガイドの例では、 students
というコレクション内の次のドキュメントを使用します。
{ "_id": 1, "name": "Jonathon Howard ", "finalGrade": 87.5 } { "_id": 2, "name": "Keisha Freeman", "finalGrade": 12.3 } { "_id": 3, "name": "Wei Zhang", "finalGrade": 99.0 } { "_id": 4, "name": "Juan Gonzalez", "finalGrade": 85.5 } { "_id": 5, "name": "Erik Trout", "finalGrade": 72.3 } { "_id": 6, "name": "Demarcus Smith", "finalGrade": 88.8 }
次のStudent
クラスは、このコレクション内のドキュメントをモデル化します。
public class Student { public int Id { get; set; } public string Name { get; set; } public double FinalGrade { get; set; } }
注意
students
コレクションのドキュメントは、キャメル ケースの命名規則を使用します。このガイドの例では、ConventionPack
を使用してコレクション内のフィールドをパスカル ケースに逆シリアル化し、Student
クラスのプロパティにマップします。
カスタム直列化について詳しくは、「 カスタム直列化 」を参照してください。
正確なカウント
クエリフィルターに一致するドキュメントの数をカウントするには、 CountDocuments()
メソッドを使用します。 空のクエリフィルターを渡すと、このメソッドはコレクション内のドキュメントの総数を返します。
例
次の例では、 finalGrade
の値が80
より小さいドキュメントの数をカウントします。
var filter = Builders<Student>.Filter.Lt(s => s.FinalGrade, 80.0); var count = _myColl.CountDocuments(filter); Console.WriteLine("Number of documents with a final grade less than 80: " + count);
Number of documents with a final grade less than 80: 2
動作の変更
CountOptions
型をパラメータとして渡すことで、 CountDocuments()
の動作を変更できます。 オプションを指定しない場合、ドライバーはデフォルト値を使用します。
CountOptions
オブジェクトでは、次のプロパティを設定できます。
プロパティ | 説明 |
---|---|
Collation | The type of language collation to use when sorting results. Default: null |
Hint | The index to use to scan for documents to count. Default: null |
Limit | The maximum number of documents to count. Default: 0 |
MaxTime | The maximum amount of time that the query can run on the server. Default: null |
Skip | The number of documents to skip before counting. Default: 0 |
Tip
CountDocuments()
を使用してコレクション内のドキュメントの合計数を返す場合、MongoDB はコレクションスキャンを実行します。 ヒント を使用して_id
フィールドの組み込みインデックスを活用することで、コレクションスキャンを回避し、このメソッドのパフォーマンスを向上させることができます。 この手法は、空のクエリ パラメータを使用してCountDocuments()
を呼び出す場合にのみ使用してください。
var filter = Builders<Student>.Filter.Empty; CountOptions opts = new CountOptions(){Hint = "_id_"}; var count = collection.CountDocuments(filter, opts);
推定のカウント
コレクション内のドキュメントの合計数を見積もるには、 EstimatedDocumentCount()
メソッドを使用します。
注意
EstimatedDocumentCount()
メソッドは、コレクション全体をスキャンするのではなく、コレクションのメタデータを使用するため、 CountDocuments()
メソッドよりも効率的です。
動作の変更
EstimatedDocumentCountOptions
型をパラメータとして渡すことで、 EstimatedDocumentCount()
の動作を変更できます。 オプションを指定しない場合、ドライバーはデフォルト値を使用します。
EstimatedDocumentCountOptions
オブジェクトでは、次のプロパティを設定できます。
プロパティ | 説明 |
---|---|
MaxTime | The maximum amount of time that the query can run on the server. Default: null |
例
次の例では、students
コレクション内のドキュメントの数を見積ります。
var count = _myColl.EstimatedDocumentCount(); Console.WriteLine("Estimated number of documents in the students collection: " + count);
Estimated number of documents in the students collection: 6
集計
Count()
ビルダー メソッドを使用して、集計パイプライン内のドキュメントの数をカウントできます。
例
次の例では、次のアクションが実行されます。
一致ステージを指定して、
FinalGrade
の値が80
より大きいドキュメントを検索します条件に一致するドキュメントの数をカウントする
var filter = Builders<Student> .Filter.Gt(s => s.FinalGrade, 80); var result = _myColl.Aggregate().Match(filter).Count(); Console.WriteLine("Number of documents with a final grade more than 80: " + result.First().Count);
Number of documents with a final grade more than 80: 4
詳細情報
上記で説明されている操作の詳細については、次のガイドを参照してください。
API ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。