集計パイプラインは、ドキュメントを処理する 1 つ以上の ステージで構成されます。これらのドキュメントは、コレクション、ビュー、または特別に設計された ステージから取得されます。
各ステージは、入力ドキュメントに対して操作を実行します。例、 ステージでは $filter ドキュメント、$group ドキュメント、および 値の計算が可能です。ステージが出力するドキュメントは、パイプラインの次のステージに渡されます。
集計パイプラインは、ドキュメントのグループの結果を返す場合があります。「 集計パイプラインによる更新 」に示されているステージを使用して、集計パイプラインでドキュメントを更新することもできます。
注意
aggregation pipelinedb.collection.aggregate()collectionメソッドで実行される は、パイプラインに$merge または$out ステージが含まれていない限り、 内のドキュメントを変更しません。
MongoDB Atlasでホストされている配置の UI で集計パイプラインを実行できます。
MongoDB Atlas UI で MongoDB Atlas 配置に対して集計パイプラインを実行すると、各ステージで結果をプレビューできます。
完全な集計パイプラインの例
「完全な集計パイプラインチュートリアル」セクションには、一般的な集計タスクのステップバイステップチュートリアルが含まれています。チュートリアルには、MongoDB Shell と各公式MongoDBドライバーの例が含まれています。
追加の集計パイプライン ステージの詳細
aggregation pipeline 、ドキュメントを処理する 1 つ以上のステージで構成されます。
ステージでは、入力ドキュメントごとに 1 つのドキュメントを出力する必要はありません。一部のステージでは、新しいドキュメントを作成したり、ドキュメントをフィルターで除外したりする場合があります。
すべての集計ステージについては、「集計ステージ」を参照してください。
式と演算子
一部の集計パイプライン ステージは式を受け入れます。 演算子は入力式に基づいて値を計算します。
MongoDB クエリ言語では、次のコンポーネントから式を構築できます。
コンポーネント | 例 |
|---|---|
定数 |
|
演算子 | |
フィールドパス式 |
|
例、{ $add: [ 3, "$inventory.total" ] } は、$add 演算子と 2 つのオペランドで構成される式です。
定数
3フィールドパス式
"$inventory.total"
式は、入力ドキュメントのパスinventory.totalの値に3を追加した結果を返します。
フィールドパス
フィールドパス式は、入力ドキュメント内のフィールドにアクセスします。フィールド名の前にドル記号 $ を付けます。例えば、"$user" は user フィールドを参照し、"$user.name" は埋め込み user.name フィールドを参照します。
"$<field>" は "$$CURRENT.<field>" と同等であり、CURRENT は、ステージで別途指定されない限り、現在のオブジェクトのルートにデフォルト設定されるシステム変数です。
その他の例については、「フィールドパス」を参照してください。
集計パイプラインの実行
集計パイプラインを実行するには、以下を使用します。
集計パイプラインを使用したドキュメントの更新
集計パイプラインでドキュメントを更新するには、以下を使用します。
その他の考慮事項
集計パイプラインの制限
値の型と結果のサイズの制限については、「集計パイプラインの制限」を参照してください。
集計パイプラインとシャーディングされたコレクション
集計パイプラインは、シャーディングされたコレクションに対する操作をサポートします。詳細については、集計パイプラインとシャーディングされたコレクション を参照してください。
map-reduce の代替としての集計パイプライン
MongoDB 5.0 以降、map-reduce は非推奨になっています。
map-reduce の代わりに、集計パイプラインを使用してください。集計パイプラインは、map-reduce よりもパフォーマンスとユーザビリティが優れています。
map-reduce 操作は、
$group、$mergeなどの集計パイプライン ステージ を使用して書き換えることができます。カスタム機能を必要とする map-reduce 操作には、
$accumulatorと$functionの集計演算子を使用できます。 これらの演算子を使用して、JavaScript でカスタム集計式を定義できます。
map-reduce を集計パイプラインに置き換える例については、以下を参照してください。
$map、$filter、$reduce での配列要素インデックスへのアクセス
MongoDB 8.3 では、$map、$filter、および$reduce 集計式の配列要素インデックスへのアクセスが改善されます。新しい arrayIndexAsフィールドを使用して、配列要素のインデックスを保存するための変数を設定できます。また、arrayIndexAs を省略した場合は、新しい $$IDX 集計システム変数を使用して現在の配列要素のインデックスにアクセスできます。
詳細
集計パイプラインの詳細については、以下を参照してください。