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

集計操作

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

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

.NET/ C#ドライバーでサポートされている集計ステージの詳細については、集計ステージを参照してください。

Tip

完全な集計チュートリアル

サーバー マニュアルの「 完全な集計パイプライン チュートリアルC# Select your language」のセクションには、一般的な集計タスクの詳細を説明するチュートリアルがあります。チュートリアルを選択し、ページの右上隅にある ドロップダウン メニューから を選択します。

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

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

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

検索操作
集計操作

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

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

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

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

  • パイプライン100 ステージには、デフォルトで メガバイトのメモリ制限があります。必要に応じて、このページの「AllowDiskUse 集計動作の変更 」セクションで説明されている プロパティを設定することで、この制限を超えることができます。

AggregateOptionsオブジェクトを渡すことで、Aggregate() メソッドの動作を変更できます。

次の表では、いくつかの AggregateOptions プロパティを説明しています。

プロパティ
説明

AllowDiskUse

パイプラインステージがディスク上の一時ファイルにデータを書き込み、100 MB のメモリ制限を超えるかどうかを指定します。

BatchSize

サーバーが各 カーソルバッチするで返すドキュメントの最大数を設定します。

Collation

操作に使用する 照合 を設定します。

Comment

プロファイラーログで操作がより特定しやすくなるように、操作にコメントを設定します

Hint

操作に使用するサーバーのインデックスを設定します。

MaxTime

操作のサーバー上での最大実行時間を設定します。

使用可能なオプションの完全なリストを確認するには、 APIドキュメントの「 AggregateOptions プロパティ 」を参照してください。

次の例では、集計パイプラインを実行し、BatchSizeプロパティを 5 に設定します。

var options = new AggregateOptions { BatchSize = 5 };
var pipeline = new EmptyPipelineDefinition<Movie>()
.Match(...)
.Group(...);
var results = collection.Aggregate(pipeline, options);

クエリAPIで使用できない LINQ またはビルダ式を使用すると、Unsupported filter ... または Expression not supported ... の例外メッセージが表示される可能性があります。次の場合、式が使用できないことがあります。

  1. 同等のMongoDB表現を持たない.NET/ C#機能を使用しようとしている例、 .NET/ C#とMongoDBでは照合に関するセマンティクスが異なります。

  2. ドライバーでは、LINQ またはビルダー式から Query APIへの特定の変換をサポートしていません。これは、提供されたクエリに Query API の翻訳がないか、ドライバーに機能が実装されていないために発生することがあります。

このような例外が発生した場合は、次の手順をお試しください。

  1. MongoDB C# Analyzerを使用して式を分析します。

  2. 可能な場合はクエリを簡素化します。

  3. クエリは BsonDocumentオブジェクトまたはJSON string として指定します。FilterDefinition、ProjectionDefinition、PipelineDefinition などのすべての定義クラスは、BsonDocument オブジェクトまたはJSON string からの暗黙的な変換をサポートしています。例、次のフィルターは クエリまたは集計で使用する場合に同等です。

    FilterDefinition<Entity> typedFilter = Builders<Entity>.Filter.Eq(e => e.A, 1);
    FilterDefinition<Entity> bsonFilter = new BsonDocument {{ "a", 1 }};
    FilterDefinition<Entity> jsonFilter = "{ a : 1 }";

次の例に示すように、同じクエリで BsonDocument オブジェクト、 JSON string、POCO を組み合わせることができます。

FilterDefinition<Entity> filter = Builders<Entity>.Filter
.And(Builders<Entity>.Filter
.Eq(e => e.A, 1), BsonDocument
.Parse("{ b : 2 }"));

注意

BsonDocumentオブジェクトまたはJSON string を使用する場合、フィールド名はサーバーによって保存されている大文字と小文字を区別する名前と一致する必要があります。例、_idフィールドを参照する場合は、フィールド名 _id を使用してそれを参照する必要があります。

Query API は手動クラスマッピング 、 BSON直列化属性、または直列化規則を認識しないため、これらのメカニズムを使用してフィールド名を変更することはできません。例、ドキュメントに [BsonElement("first_name")] で注釈が付けられた FirstName という名前のフィールドが含まれている場合は、BsonDocument またはJSON string 定義で first_name として参照する必要があります。

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

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