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

集計

このガイドでは、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 LINQvar queryableCollection = collection.AsQueryable(); // Defines the query with $match and $group stagesvar 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 resultsforeach (var result in query.ToList()){ Console.WriteLine(result);}

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 stagesvar pipeline = new EmptyPipelineDefinition<Restaurant>() .Match(matchFilter) .Group(r => r.Borough, g => new { _id = g.Key, Count = g.Count() } ); // Executes the aggregation pipelinevar results = collection.Aggregate(pipeline).ToList(); // Prints the aggregated resultsforeach (var result in results){ Console.WriteLine(result);}

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

// Defines the $match and $group aggregation stagesvar 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 pipelinevar pipeline = new[] { matchStage, groupStage };var results = collection.Aggregate<BsonDocument>(pipeline).ToList(); // Prints the aggregated resultsforeach (BsonDocument result in results){ Console.WriteLine(result);}

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

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

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

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

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