AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

集計

このガイドでは、MongoDB .NET/C# ドライバーを使用して集計操作を実行する方法を学習できます。

集計操作により MongoDB コレクション内のデータが処理され、計算結果が返されます。 MongoDB 集計フレームワークは、データ処理パイプラインの概念をモデル化したものです。 ドキュメントは 1 つ以上のステージで構成されるパイプラインに投入され、そこで集計結果に変換されます。

集計操作は、組み立てラインを持つ自動車工場と同様に機能します。 組立ラインには、特定のタスクを実行するための専用ツールを備えたステーションがあります。 たとえば、自動車をビルドする場合、組立ラインは フレームから始まります。 その後、自動車フレームが組み立てラインを通過するにつれて、各ステーションは個別の部分を組み立てます。 その結果は変換された最終製品、完成品です。

組立ラインは集計パイプラインを表し、個々のステーションは集計ステージを表し、専用ツールは式演算子を表し、完成品は集計結果を表します。

次の表は、集計操作で実行できる操作と比較して、検索操作で実行できるさまざまなタスクを示しています。 集計フレームワークは、データを変換および操作するための拡張機能を提供します。

検索操作
集計操作

返す特定のドキュメントを選択して返す
返すフィールドを選択して返す
結果を並べ替える
結果を制限する
結果をカウントする

返す特定のドキュメントを選択して返す
返すフィールドを選択する
結果を並べ替える
結果を制限する
結果をカウントする
結果をグループ化する
フィールドの名前を変更
フィールドを計算する
データを要約する
データセットを接続およびマージする

集計操作を実行する際には、次の制限を考慮してください。

  • 返されるドキュメントは、 16メガバイトのBSON ドキュメント サイズ 制限に違反していない必要があります。

  • パイプライン ステージには、デフォルトで 100 メガバイトのメモリ制限があります。必要な場合は、AggregateOptions メソッドに渡す オブジェクトの AllowDiskUseプロパティを設定することで、この制限を超えることができます。Aggregate()

  • $graphLookupステージは100メガバイトという厳格なメモリ制限があり、 AllowDiskUseプロパティを無視します。

集計を実行するには、集計ステージのリストを IMongoCollection<TDocument>.Aggregate() メソッドに渡します。

注意

この例では、 Atlas サンプル データセットsample_restaurants.restaurantsコレクションを使用します。 MongoDB Atlas クラスターを無料で作成して、サンプル データセットをロードする方法については、クイック スタート を参照してください。

次のコード例では、ニューヨーク市の各地区のケーキの数のカウントを生成します。 そのために、次のステージを含む 集計パイプライン を使用します。

  • $matchステージで、 cuisineフィールドに値"Bakery"が含まれるドキュメントをフィルタリングします。

  • 一致するドキュメントをboroughフィールドでグループ化し、そのフィールドの個別の値ごとにドキュメントの数を累積する$groupステージ。

次のセクションでは、LINQ、Builder、BsonDocument アプローチを使用してサンプル パイプラインで使用される集計ステージを作成および組み合わせて、この例を実装します。

// Defines a queryable collection object as a prerequisite to using LINQ
var queryableCollection = collection.AsQueryable();
// Defines the query with $match and $group stages
var query = queryableCollection
.Where(r => r.Cuisine == "Bakery")
.GroupBy(r => r.Borough)
.Select(g => new { _id = g.Key, Count = g.Count() });
// Executes the query and prints the aggregated results
foreach (var result in query.ToList())
{
Console.WriteLine(result);
}
{ _id = Bronx, Count = 71 }
{ _id = Brooklyn, Count = 173 }
{ _id = Staten Island, Count = 20 }
{ _id = Missing, Count = 2 }
{ _id = Manhattan, Count = 221 }
{ _id = Queens, Count = 204 }

LINQ を使用して集計パイプラインを構築する方法の詳細については、「集計操作の LINQシンタックス」ガイドを参照してください。

// Defines the $match aggregation stage
var matchFilter = Builders<Restaurant>.Filter.Eq(r => r.Cuisine, "Bakery");
// Defines the aggregation pipeline with the $match and $group aggregation stages
var pipeline = new EmptyPipelineDefinition<Restaurant>()
.Match(matchFilter)
.Group(r => r.Borough,
g => new
{
_id = g.Key,
Count = g.Count()
}
);
// Executes the aggregation pipeline
var results = collection.Aggregate(pipeline).ToList();
// Prints the aggregated results
foreach (var result in results)
{
Console.WriteLine(result);
}
{ _id = Bronx, Count = 71 }
{ _id = Brooklyn, Count = 173 }
{ _id = Staten Island, Count = 20 }
{ _id = Missing, Count = 2 }
{ _id = Manhattan, Count = 221 }
{ _id = Queens, Count = 204 }

ビルダーを使用して集計パイプラインを構築する方法の詳細については、「 ビルダによる操作 」の「集計パイプラインの構築 」セクションを参照してください。

// Defines the $match and $group aggregation stages
var matchStage = new BsonDocument
{
{
"$match",
new BsonDocument
{
{ "cuisine", "Bakery" }
}
}
};
var groupStage = new BsonDocument
{
{
"$group",
new BsonDocument
{
{ "_id", "$borough" },
{ "count", new BsonDocument("$sum", 1) }
}
}
};
// Executes the aggregation pipeline
var pipeline = new[] { matchStage, groupStage };
var results = collection.Aggregate<BsonDocument>(pipeline).ToList();
// Prints the aggregated results
foreach (BsonDocument result in results)
{
Console.WriteLine(result);
}
{ "_id" : "Brooklyn", "count" : 173 }
{ "_id" : "Manhattan", "count" : 221 }
{ "_id" : "Bronx", "count" : 71 }
{ "_id" : "Missing", "count" : 2 }
{ "_id" : "Staten Island", "count" : 20 }
{ "_id" : "Queens", "count" : 204 }

集計ステージの完全なリストについては、MongoDB Serverマニュアルの集計ステージを参照してください。

集計パイプラインのアセンブルと例についての詳細は、「集計パイプライン 」を参照してください。

パイプライン ステージの作成の詳細については、「集計ステージ 」を参照してください。

MongoDB 集計操作の説明の詳細については、「結果の説明クエリプランの説明 」を参照してください。

このガイドで説明されている集計操作の詳細については、次の API ドキュメントを参照してください。