banner

ブログ

Jun 01, 2023

MongoDB で集計パイプラインを使用する方法

MapReduce を頼りにしていた場合は、複雑な操作に取り組むために MongoDB の集約パイプラインに移行する時期が来ているかもしれません。

集約パイプラインは、MongoDB で複雑なクエリを実行する場合に推奨される方法です。 MongoDB の MapReduce を使用している場合は、より効率的な計算を行うために、集計パイプラインに切り替えることをお勧めします。

集約パイプラインは、MongoDB で高度なクエリを実行するための複数段階のプロセスです。 パイプラインと呼ばれるさまざまなステージを通じてデータを処理します。 あるレベルから生成された結果を別のレベルの操作テンプレートとして使用できます。

たとえば、一致操作の結果を別のステージに渡し、目的の出力が得られるまでその順序で並べ替えることができます。

集約パイプラインの各ステージは MongoDB オペレーターを特徴とし、1 つ以上の変換されたドキュメントを生成します。 クエリによっては、レベルがパイプライン内で複数回出現する場合があります。 たとえば、次のようなものを使用する必要があるかもしれません。$countまたは$sortオペレーターは、集約パイプライン全体で複数回ステージングします。

集約パイプラインは、単一のクエリで複数のステージを通じてデータを渡します。 いくつかの段階があり、その詳細については MongoDB のドキュメントを参照してください。

以下で最も一般的に使用されるもののいくつかを定義しましょう。

このステージは、他の集計ステージを開始する前に、特定のフィルタリング条件を定義するのに役立ちます。 これを使用して、集計パイプラインに含める一致するデータを選択できます。

グループ ステージでは、キーと値のペアを使用して、特定の基準に基づいてデータをさまざまなグループに分類します。 各グループは出力ドキュメント内のキーを表します。

たとえば、次のことを考えてみましょう販売サンプルデータ:

集計パイプラインを使用すると、各製品セクションの合計販売数と上位売上を計算できます。

_id: $セクションペアは、セクションに基づいて出力ドキュメントをグループ化します。 を指定することで、top_sales_countそしてトップセールスフィールドでは、MongoDB はアグリゲーターによって定義された操作に基づいて新しいキーを作成します。 これはありえます$sum$分$max、 または平均$

使用できます$スキップステージを使用して、出力内の指定された数のドキュメントを省略します。 通常はグループステージ後に行われます。 たとえば、2 つの出力ドキュメントが予期されているが 1 つをスキップした場合、集計は 2 番目のドキュメントのみを出力します。

スキップステージを追加するには、$スキップ集約パイプラインへの操作:

並べ替えステージでは、データを降順または昇順に並べることができます。 たとえば、前のクエリ例のデータを降順でさらに並べ替えて、どのセクションの売上が最も高いかを判断できます。

を追加します。$sort前のクエリに対する演算子:

制限操作は、集計パイプラインで表示する出力ドキュメントの数を減らすのに役立ちます。 たとえば、$limit演算子は、前のステージで返された売上が最も高いセクションを取得します。

上記は最初のドキュメントのみを返します。 これは、並べ替えられた出力の上部に表示されるため、最も売上が高いセクションです。

$プロジェクト stage を使用すると、出力ドキュメントを自由に整形できます。 の使用$プロジェクト演算子を使用すると、出力に含めるフィールドを指定し、そのキー名をカスタマイズできます。

たとえば、$プロジェクトステージは次のようになります:

でどのようになるかを見てみましょう$プロジェクトステージ。 追加するには、$プロジェクトパイプラインに:

以前に製品セクションに基づいてデータをグループ化したため、上記の出力ドキュメントには各製品セクションが含まれています。 また、集計された売上数と上位売上高が出力に含まれることも保証します。合計販売額そして

共有