定義
$countステージに入力されたドキュメントの数を含むドキュメントを次のステージに渡します。
注意
曖昧さ回避
このページでは、
$count集計パイプライン ステージについて説明します。$count集計アキュムレータについては、$count (aggregation accumulator)を参照してください。
互換性
次の環境でホストされる配置には $count を使用できます。
MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです
MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン
MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン
構文
$count の構文は次のとおりです。
{ $count: <string> }
<string> はカウントを値として持つ出力フィールドの名前です。<string> には空でない文字列であること、$ で始まらないこと、. 文字を含まないことという条件があります。
動作
$countステージは、次の$group と$project シーケンスと同等です。
db.collection.aggregate( [ { $group: { _id: null, myCount: { $sum: 1 } } }, { $project: { _id: 0 } } ] )
myCount は、カウントを保存する出力フィールドです。 この出力フィールドには別の名前を指定できます。
入力データセットが空の場合、$count は結果を返しません。
Tip
db.collection.countDocuments() は、$group 集計ステージを$sum 式でラップします。
例
これらのドキュメントを使用して、scores という名前のコレクションを作成します。
db.scores.insertMany( [ { "_id" : 1, "subject" : "History", "score" : 88 }, { "_id" : 2, "subject" : "History", "score" : 92 }, { "_id" : 3, "subject" : "History", "score" : 97 }, { "_id" : 4, "subject" : "History", "score" : 71 }, { "_id" : 5, "subject" : "History", "score" : 79 }, { "_id" : 6, "subject" : "History", "score" : 83 } ] )
次の集計操作には 2 つのステージがあります。
$matchステージでは、score値が80以下であるドキュメントを除外し、score値が80を超えるドキュメントを次のステージに渡します。$countステージは、集計パイプラインに残っているドキュメントの数を返し、その値をpassing_scoresというフィールドに割り当てます。
db.scores.aggregate( [ { $match: { score: { $gt: 80 } } }, { $count: "passing_scores" } ] )
この操作は、次の結果を返します。
{ "passing_scores" : 4 }
入力データセットが空の場合、$count は結果を返しません。 次の例では、スコアが 99 を超えるドキュメントがないため、結果は返されません。
db.scores.aggregate( [ { $match: { score: { $gt: 99 } } }, { $count: "high_scores" } ] )
このページのC#の例では、Atlasサンプルデータセット の sample_mflixデータベースを使用します。MongoDB Atlasクラスターを無料で作成して、サンプルデータセットをロードする方法については、 MongoDB .NET/ C#ドライバーのドキュメントの「 開始 」を参照してください。
次の Movie クラスは、sample_mflix.movies コレクション内のドキュメントをモデル化します。
public class Movie { public ObjectId Id { get; set; } public int Runtime { get; set; } public string Title { get; set; } public string Rated { get; set; } public List<string> Genres { get; set; } public string Plot { get; set; } public ImdbData Imdb { get; set; } public int Year { get; set; } public int Index { get; set; } public string[] Comments { get; set; } [] public DateTime LastUpdated { get; set; } }
注意
パスカルケースの ConventionPack
このページのC# クラスはプロパティ名にパスカルケースを使用していますが、MongoDB コレクションのフィールド名はキャメルケースを使用しています。この違いを考慮するために、アプリケーションが起動する際に次のコードを使用してConventionPackを登録してください。
var camelCaseConvention = new ConventionPack { new CamelCaseElementNameConvention() }; ConventionRegistry.Register("CamelCase", camelCaseConvention, type => true);
MongoDB .NET/ C#ドライバーを使用して$count ステージを集計パイプラインに追加するには、 PipelineDefinitionオブジェクトで Count() メソッドを呼び出します。
次の例では、入力ドキュメントの数をカウントし、その数を値として返すドキュメントを返すパイプラインステージを作成しています。
var pipeline = new EmptyPipelineDefinition<Movie>() .Count();
このページのNode.js の例では、Atlasサンプルデータセット の sample_mflixデータベースを使用します。無料のMongoDB Atlas cluster を作成し、サンプルデータセットをロードする方法については、 MongoDB Node.jsドライバーのドキュメントの開始を参照してください。
MongoDB Node.jsドライバーを使用して $count ステージを集計パイプラインに追加するには、パイプラインオブジェクトで $count 演算子を使用します。
次の例では、sample_mflix.moviesコレクションからの入力ドキュメントの数をカウントし、カウントを含むドキュメントを返すパイプラインステージを作成します。次に、この例では集計パイプラインを実行します。
const pipeline = [{ $count: "movies" }]; const cursor = collection.aggregate(pipeline); return cursor;