Share via


集計パイプラインの使用の開始

集計パイプラインは、開発者がコレクションに対して高度なデータ分析と操作を実行できる強力なツールです。 パイプラインは一連のデータ処理操作であり、計算された出力を生成するために入力ドキュメントに対して実行されます。 パイプラインのステージでは、入力ドキュメントを処理し、結果を次のステージに渡します。 各ステージでは、フィルター処理、グループ化、並べ替え、変換など、データに対して特定の操作を実行します。

基本構文

集計パイプラインの基本的な構文は次のとおりです。

db.collection.aggregate([    { stage1 },    { stage2 },    ...    { stageN }])

ここで、db.collection は集計を実行する MongoDB コレクションであり、stage1、stage2、...、stageN は適用するパイプライン ステージです。

サンプルのステージ

Cosmos DB for MongoDB には、パイプラインで使用できるさまざまなステージが用意されており、次のようなものがあります。

  • $match: ドキュメントをフィルター処理して、指定した条件に一致するドキュメントのみを渡します。
  • $project: フィールドを追加、削除、または更新して、ドキュメントを新しいフォームに変換します。
  • $group: ドキュメントを 1 つ以上のフィールドでグループ化し、グループ化されたデータに対してさまざまな集計関数を実行します。
  • $sort: 指定したフィールドに基づいてドキュメントを並べ替えます。
  • $skip: 指定した数のドキュメントをスキップします。
  • $limit: 次のステージに渡されるドキュメントの数を制限します。
  • $unwind: 入力ドキュメントの配列フィールドを分解して、要素ごとにドキュメントを出力します。

利用できるすべてのステージを表示するには、サポートされている機能に関する記事を参照してください

集計パイプラインを使用してデータに対してさまざまな操作を実行する方法の例をいくつか次に示します。

フィルター処理: "quantity" フィールドの値が 20 を超えるドキュメントをフィルター処理するには、次のパイプラインを使用します。

db.collection.aggregate([
    { $match: { quantity: { $gt: 20 } } }
])

グループ化: "category" フィールドでドキュメントをグループ化し、各グループの合計の "quantity" を計算するには、次のパイプラインを使用します。

db.collection.aggregate([
    { $group: { _id: "$category", totalQuantity: { $sum: "$quantity" } } }
])

並べ替え: "price" フィールドでドキュメントを降順に並べ替えるには、次のパイプラインを使用します。

db.collection.aggregate([
    { $sort: { price: -1 } }
])

変換: "price" が 100 を超えるドキュメントに新しいフィールド "discount" を追加するには、次のパイプラインを使用します。

db.collection.aggregate([
    { $project: { item: 1, price: 1, discount: { $cond: [{ $gt: ["$price", 100] }, 10, 0 ] } } }
])

アンワインド: 配列フィールド 'tags' からすべてのサブドキュメントを分離し、値ごとに新しいドキュメントを作成するには、次のパイプラインを使用します。

db.collection.aggregate([
    { $unwind: "$tags" }
])

複数のステージを含む例

db.sales.aggregate([
  { $match: { date: { $gte: "2021-01-01", $lt: "2021-03-01" } } },
  { $group: { _id: "$category", totalSales: { $sum: "$sales" } } },
  { $sort: { totalSales: -1 } },
  { $limit: 5 }
])

この例では、"sales" という名前のサンプル コレクションを使用しています。これには、"date"、"category"、"sales" というフィールドを持つドキュメントが含まれています。

最初のステージ { $match: { date: { $gte: "2021-01-01", $lt: "2021-03-01" } } } では、"date" フィールドでドキュメントをフィルター処理し、2021 年 1 月 1 日から 2021 年 2 月 28 日の間の日付を持つドキュメントのみを渡します。 形式が "YYYY-MM-DD" の文字列日付形式を使用しています。

2 番目のステージ { $group: { _id: "$category", totalSales: { $sum: "$sales" } } } では、"category" フィールドでドキュメントをグループ化し、各グループの総売上を計算します。

3 番目のステージ { $sort: { totalSales: -1 } } では、ドキュメントを "totalSales" フィールドで降順に並べ替えます。

4 番目のステージ { $limit: 5 } では、次のステージに渡されるドキュメントの数を上位 5 つのみに制限します。

その結果、パイプラインは、指定された日付範囲の総売上で上位 5 つのカテゴリを返します。

次のステップ