集計パイプラインは、ドキュメントを処理する 1 つ以上の ステージで構成されます。
各ステージは、入力ドキュメントに対して操作を実行します。 例えば、ステージでは、文書のフィルター処理、文書のグループ化、および値の計算を行うことができます。
ステージから出力された文書は、次のステージに渡されます。
aggregation pipelineドキュメントのグループの結果を返すことができます。 たとえば、合計値、平均値、最大値、最小値を返します。
aggregation pipeline aggregation pipelineでドキュメントを更新できます。
注意
db.collection.aggregate()
メソッドで実行される集計パイプラインは、パイプラインに $merge
または $out
ステージが含まれていない限り、コレクション内のドキュメントを変更しません。
MongoDB Atlasでホストされている配置の UI で集計パイプラインを実行できます。
MongoDB Atlas UI で MongoDB Atlas 配置に対して集計パイプラインを実行すると、各ステージで結果をプレビューできます。
完全な集計パイプラインの例
「 完全な集計パイプライン チュートリアル 」セクションには、一般的な集計タスクを ステップバイステップ形式で詳しく説明する完全なチュートリアルが含まれています。チュートリアルには、 MongoDB Shell と各公式MongoDBドライバーの例えが含まれています。
追加の集計パイプライン ステージの詳細
aggregation pipeline 、ドキュメントを処理する 1 つ以上のステージで構成されます。
ステージでは、入力ドキュメントごとに 1 つのドキュメントを出力する必要はありません。たとえば、一部のステージでは、新しいドキュメントを作成したり、フィルターでドキュメントを除外したりする場合があります。
$out
、$merge
、$geoNear
ステージを除き、同じステージがパイプラインに何度か表示される可能性があります。ステージ内で平均を計算したり、その他の計算を実行するには、集計演算子を指定する集計式を使用します。集計式については、次のセクションで詳しく説明します。
すべての集計ステージについては、「集計ステージ」を参照してください。
集計式と演算子
一部の集計パイプライン ステージは式を受け入れます。 演算子は入力式に基づいて値を計算します。
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 を集計パイプラインに置き換える例については、以下を参照してください。
詳細
集計パイプラインの詳細については、以下を参照してください。