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

集計

項目一覧

  • Overview
  • アナロジー
  • 集計操作と検索操作の比較
  • サーバーの制限
  • 集計の例
  • LINQ アプローチ
  • ビルダーのアプローチ
  • BsonDocument のアプローチ
  • 詳細情報
  • MongoDB Server マニュアル
  • API ドキュメント

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

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

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

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

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

検索操作
集計操作
Select certain documents to return
Select which fields to return
Sort the results
Limit the results
Count the results
Select certain documents to return
Select which fields to return
Sort the results
Limit the results
Count the results
Group the results
Rename fields
Compute new fields
Summarize data
Connect and merge data sets

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

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

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

  • $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 集計操作の説明の詳細については、「結果の説明クエリプランの説明 」を参照してください。

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

戻る

Kerberos (GSSAPI)