MongoDBにおけるアグリゲーションの役割は?

MongoDBの集計(Aggregate)は、コレクション内のドキュメントのグループ化、フィルタリング、ソートなどの操作を行い、処理された結果を返します。

集約演算は、通常、それぞれ異なる機能を持つ複数のフェーズ(ステージ)から成ります。次は、一般的な集約フェーズの一部です:

  1. $match:指定した条件に従ってドキュメントをフィルタリングし、この操作は、クエリ操作のfindメソッドと似ています。
  2. グループ:ドキュメントを指定されたフィールドでグループ化し、それぞれのグループに集約関数(カウント、合計、平均など)を適用します。
  3. ソート:ドキュメントを並べ替えます。ソートするフィールドや、昇順または降順の並べ替え方法を指定できます。
  4. $project: ドキュメントの投影、つまり返却するフィールドを選択、式による計算またはフィールド名の変更が可能
  5. 返される結果の件数を制限し、指定された件数のドキュメントのみを返します。
  6. $skip: 指定した数のドキュメントをスキップして、残りのドキュメントを返します。
  7. unwind:配列を含むドキュメントを、配列内の各要素を含む個々のドキュメントに分割します。
  8. 別のコレクションに関連付けられたドキュメントを、1 つのコレクション内で検索します。これは、リレーショナルデータベースの JOIN 操作に似ています。

アグリゲーション操作は、段階を組み合わせて複数のアクションを実行するアグリゲーションパイプラインとして使用できます。各段階のアウトプットは、次の段階のインプットとして使われます。必要な段階を組み合わせて複雑なデータの処理のニーズを実現できます。

これはアグリゲーション操作を使用したサンプルです。ordersコレクションが仮定されており、注文情報が含まれています。

db.orders.aggregate([
  { $match: { status: "completed" } },
  { $group: { _id: "$customer", totalAmount: { $sum: "$amount" } } },
  { $sort: { totalAmount: -1 } },
  { $limit: 10 }
])

「completed」ステータスの注文を選出し、顧客ごとにグループ化し、顧客ごとの合計金額を計算し、合計金額で降順にソートし、上位10件のみを返します。

集約演算の例はこれ一つだけではなく、具体的な需要に応じて集約フェーズを柔軟に組み合わせることで、異なるデータ処理タスクの実装が可能です。

bannerAds