Docs Menu
Docs Home
/ / /
C#/.NET ドライバー
/

集計パイプライン ステージ

このページでは、 .NET/ C#ドライバーのメソッドを使用して、集計パイプラインとパイプラインステージを作成する方法を学習できます。

.NET/ C#ドライバーを使用すると、ビルダー メソッドまたはBSONドキュメントを使用して集計パイプラインを構築できます。これらのそれぞれのアプローチの詳細については、次のセクションを参照してください。

型安全性のある集計パイプラインは、次の方法で構築できます。

  • EmptyPipelineDefinition<TDocument>オブジェクトを構築します。このオブジェクトから関連する集計メソッドへの呼び出しを連鎖させます。次に、パイプラインオブジェクトを IMongoCollection<TDocument>.Aggregate() メソッドに渡します。

  • IMongoCollection<TDocument>.Aggregate() メソッドを呼び出します。このメソッド呼び出しから関連する集計メソッドへの呼び出しを連鎖させます。

各アプローチに対応するコードを表示するには、EmptyPipelineDefinition タブまたは Aggregateタブを選択します。

// Defines the aggregation pipeline
var pipeline = new EmptyPipelineDefinition<Movie>()
.Match(...)
.Group(...)
.Merge(...);
// Executes the aggregation pipeline
var results = collection.Aggregate(pipeline);
// Defines and executes the aggregation pipeline
var results = collection.Aggregate()
.Match(...)
.Group(...)
.Merge(...);

一部の集計ステージには、 .NET/ C#ドライバーには対応するメソッドがありません。これらのステージをパイプラインに追加するには、BsonDocument オブジェクトまたは string リテラルを使用して クエリAPI構文でステージを構築します。次に、 BSONドキュメントを PipelineDefinitionBuilder.AppendStage() メソッドに渡します。この構文は集計パイプラインのすべてのステージをサポートしていますが、型のヒントや型の安全性は提供されません。

次のコード例は、空の集計パイプラインに $unset ステージを追加する方法を示しています。

var pipeline = new EmptyPipelineDefinition<BsonDocument>()
.AppendStage<BsonDocument, BsonDocument, BsonDocument>("{ $unset: 'field1' }");

重要

BsonDocument を使用してパイプラインステージを定義する場合、ドライバーは BsonClassMap 属性、直列化属性、または直列化規則を認識しません。BsonDocument で使用するフィールド名は、 MongoDB Serverに保存されているフィールド名と一致する必要があります。

次の表は、集計パイプラインライン のステージに対応する.NET/ C#ドライバー内のビルダ メソッドを示しています。集計ステージの詳細と同等のC#メソッドのコード例を確認するには、ステージ名からMongoDB Serverマニュアルの参照ページへのリンクに従ってください。

集計ステージがテーブルにない場合、ドライバーはそのビルダ メソッドを提供しません。この場合、 ステージをパイプラインに追加するには、 BsonDocument構文を使用する必要があります。

集計ステージ
説明
ビルダーメソッド

受信ドキュメントを、指定された式とバケット境界に基づいて、バケットと呼ばれるグループに分類します。

Bucket()

指定された式に基づいて、受信したドキュメントをバケットと呼ばれる特定の数のグループに分類します。指定された数のバケットにドキュメントを均等に分散するために、バケット境界が自動的に決定されます。

BucketAuto()

コレクションの変更ストリームカーソル を返します。このステージは集計パイプラインで 1 回のみ発生し、第 1 ステージとして実行する必要があります。

ChangeStream()

16 MB を超える大きな変更ストリームイベントを、変更ストリームカーソルで返される小さなフラグメントに分割します。

$changeStreamSplitLargeEvent$changeStreamパイプラインでのみ使用でき、パイプラインの最終ステージである必要があります。

ChangeStreamSplitLargeEvent()

集計パイプラインのこの段階でのドキュメントの数を返します。

Count()

フィールド内の特定の値が欠落しているドキュメントのシーケンス内に新しいドキュメントを作成します。

Densify()

入力式からリテラル ドキュメントを返します。

Documents()

同じ入力ドキュメントセット上の単一ステージ内の複数の集計パイプラインを処理します。 複数のディメンションまたはファセットにわたるデータを1つの段階で特徴付けることができる多面的な集計を作成できます。

Facet()

コレクションに対して再帰的な検索を実行します。このメソッドは、そのドキュメントの再帰検索のトラバーサル結果を含む新しい配列フィールドを各出力ドキュメントに追加します。

GraphLookup()

入力ドキュメントを指定された式式でグループ化し、アキュムレータ式(指定されている場合)を各グループに適用します。すべての入力ドキュメントを消費し、個別のグループごとに 1 つのドキュメントを出力します。出力ドキュメントには、IDフィールドと、指定されている場合は累積フィールドのみが含まれます。

Group()

変更されていない最初の n 個のドキュメントをパイプラインに渡します。 n は指定された制限です。入力ドキュメントごとに、1 件のドキュメント(最初の n 個のドキュメント)または 0 件のドキュメント (最初の n 個のドキュメントの後 )を出力します。

Limit()

同じデータベース内の別のコレクションへの左外部結合を実行して、"join" コレクションのドキュメントをフィルタリングして処理します。

Lookup()

ドキュメントストリームをフィルタリングして、一致するドキュメントのみが変更されずに次のパイプラインステージに渡されるようにします。入力ドキュメントごとに、1 件のドキュメント(一致)または 0 件のドキュメント(一致なし)を出力します。

Match()

集計パイプラインの結果ドキュメントをコレクションに書き込みます。ステージは(新しいドキュメントの挿入、ドキュメントのマージ、ドキュメントの置換、既存のドキュメントの保持、操作の失敗 、 カスタムアップデートパイプラインによるドキュメントの処理 )の結果を出力コレクションに組み込むことができます。このステージを使用するには、パイプラインの最後のステージ である必要があります。

Merge()

集計パイプラインの結果ドキュメントをコレクションに書き込みます。このステージを使用するには、パイプラインの最後のステージ である必要があります。

Out()

新しいフィールドを追加したり、既存のフィールドを削除したりして、ストリーム内の各ドキュメントを再構築します。入力ドキュメント 1 件ごとに、1つのドキュメントを出力します。

Project()

指定された埋め込みドキュメントでドキュメントを置き換えます。この操作により、_id フィールドを含む入力ドキュメント内の既存のフィールドがすべて置き換えられます。入力ドキュメントに埋め込まれているドキュメントを指定して、埋め込まれたドキュメントをトップレベルにプロモートします。

$replaceWith ステージは $replaceRoot ステージのエイリアスです。

ReplaceRoot()

指定された埋め込みドキュメントでドキュメントを置き換えます。この操作により、_id フィールドを含む入力ドキュメント内の既存のフィールドがすべて置き換えられます。入力ドキュメントに埋め込まれているドキュメントを指定して、埋め込まれたドキュメントをトップレベルにプロモートします。

$replaceWith ステージは $replaceRoot ステージのエイリアスです。

ReplaceWith()

入力から指定した数のドキュメントをランダムに選択します。

Sample()

Atlasコレクション内のフィールドの全文検索を実行します。

このステージはMongoDB Atlasクラスターでのみ使用でき、自己管理型配置では使用できません。詳細については、Atlas ドキュメントの「Atlas Search 集計パイプラインステージ」を参照してください。

Search()

Atlas コレクションに対する Atlas 検索 クエリの結果として、さまざまなタイプのメタデータ結果ドキュメントを返します。

このステージはMongoDB Atlasクラスターでのみ使用でき、自己管理型配置では使用できません。詳細については、Atlas ドキュメントの「Atlas Search 集計パイプラインステージ」を参照してください。

SearchMeta()

ドキュメントに新しいフィールドを追加します。Project() メソッドと同様に、このメソッドはストリーム内の各ドキュメントを再形成し、入力ドキュメントの既存のフィールドと新しく追加されたフィールドの両方を含む出力ドキュメントに新しいフィールドを追加します。

Set()

ドキュメントをウィンドウにグループ化し、各ウィンドウのドキュメントに 1 つまたは複数のオペレーターを適用します。

SetWindowFields()

最初の n 個のドキュメント(n は指定されたスキップ番号)をスキップし、残りのドキュメントは変更されずにパイプラインに渡されます。入力ドキュメントごとに、0 件のドキュメント(最初の n 個のドキュメント)または 1 件のドキュメント(最初の n 個のドキュメントの後)を出力します。

Skip()

指定されたソートキーでドキュメントストリームを並べ替えます。ドキュメントは変更されないままです。入力ドキュメントごとに、1 つのドキュメントを出力します。

Sort()

指定された式の値に基づいて受信ドキュメントをグループ化し、個別のグループごとにドキュメントの数を計算します。

SortByCount()

2 つのコレクションのパイプライン結果を 1 つの結果セットに結合します。

UnionWith()

入力ドキュメントから配列フィールドを分解して、 要素のドキュメントを出力します。各出力ドキュメントは、配列を要素の値で置き換えます。入力ドキュメントごとにn個のドキュメントを出力します。nは配列要素の数です。n は、空の配列の場合に 0 になる可能性があります。

Unwind()

Atlas コレクションの指定されたフィールド内のベクトルに対して、ANN または ENN 検索を実行します。

このステージはMongoDB Atlasクラスターでのみ使用でき、自己管理型配置では使用できません。詳細については、 Atlas ベクトル検索 を参照してください。

VectorSearch()

集計パイプラインの組み立ての詳細については、 MongoDB Serverマニュアルの 集計パイプライン を参照してください。

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

このページで使用されているメソッドとクラスの詳細については、次のAPIドキュメントを参照してください。

戻る

集計

項目一覧