Docs Menu
Docs Home
/ / /
C#/.NET
/ / /

ドキュメントをカウント

項目一覧

  • 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 ドキュメントを参照してください。

戻る

Retrieve Data