MongoDBにおけるアグリゲーションの役割は?
MongoDBの集計(Aggregate)は、コレクション内のドキュメントのグループ化、フィルタリング、ソートなどの操作を行い、処理された結果を返します。
集約演算は、通常、それぞれ異なる機能を持つ複数のフェーズ(ステージ)から成ります。次は、一般的な集約フェーズの一部です:
- $match:指定した条件に従ってドキュメントをフィルタリングし、この操作は、クエリ操作のfindメソッドと似ています。
- グループ:ドキュメントを指定されたフィールドでグループ化し、それぞれのグループに集約関数(カウント、合計、平均など)を適用します。
- ソート:ドキュメントを並べ替えます。ソートするフィールドや、昇順または降順の並べ替え方法を指定できます。
- $project: ドキュメントの投影、つまり返却するフィールドを選択、式による計算またはフィールド名の変更が可能
- 返される結果の件数を制限し、指定された件数のドキュメントのみを返します。
- $skip: 指定した数のドキュメントをスキップして、残りのドキュメントを返します。
- unwind:配列を含むドキュメントを、配列内の各要素を含む個々のドキュメントに分割します。
- 別のコレクションに関連付けられたドキュメントを、1 つのコレクション内で検索します。これは、リレーショナルデータベースの JOIN 操作に似ています。
アグリゲーション操作は、段階を組み合わせて複数のアクションを実行するアグリゲーションパイプラインとして使用できます。各段階のアウトプットは、次の段階のインプットとして使われます。必要な段階を組み合わせて複雑なデータの処理のニーズを実現できます。
これはアグリゲーション操作を使用したサンプルです。ordersコレクションが仮定されており、注文情報が含まれています。
db.orders.aggregate([
{ $match: { status: "completed" } },
{ $group: { _id: "$customer", totalAmount: { $sum: "$amount" } } },
{ $sort: { totalAmount: -1 } },
{ $limit: 10 }
])
「completed」ステータスの注文を選出し、顧客ごとにグループ化し、顧客ごとの合計金額を計算し、合計金額で降順にソートし、上位10件のみを返します。
集約演算の例はこれ一つだけではなく、具体的な需要に応じて集約フェーズを柔軟に組み合わせることで、異なるデータ処理タスクの実装が可能です。