集約

aggregate コマンドは、データ レコードを処理し、計算結果を返すために使用されます。 フィルター処理、グループ化、並べ替えなど、データに対する操作を実行し、さまざまな方法でデータを変換できます。 aggregate コマンドは汎用性が高く、データ分析やレポート作成でよく使用されます。

構文

db.collection.aggregate(pipeline, options)
  • パイプライン: データを処理および変換する集計ステージの配列。
  • options: 省略可能。 集計のその他のオプション ( explainallowDiskUsecursorなど) を指定します。

例示

例 1: カテゴリ別の売上合計を計算する

この例では、 stores コレクション内の各カテゴリの売上合計を計算する方法を示します。

db.stores.aggregate([
  {
    $unwind: "$sales.salesByCategory"
  },
  {
    $group: {
      _id: "$sales.salesByCategory.categoryName",
      totalSales: { $sum: "$sales.salesByCategory.totalSales" }
    }
  }
])

サンプル出力

[
  { "_id": "Christmas Trees", "totalSales": 3147281 },
  { "_id": "Nuts", "totalSales": 3002332 },
  { "_id": "Camping Tables", "totalSales": 4431667 }
]

例 2: フルタイムスタッフが 10 人を超える店舗を検索する

この例では、フルタイム スタッフの数が 10 を超えるストアをフィルター処理する方法を示します。

db.stores.aggregate([
  {
    $match: {
      "staff.totalStaff.fullTime": { $gt: 10 }
    }
  }
])

サンプル出力

[
  {
    "_id": "7954bd5c-9ac2-4c10-bb7a-2b79bd0963c5",
    "name": "Lenore's DJ Equipment Store",
    "location": { "lat": -9.9399, "lon": -0.334 },
    "staff": { "totalStaff": { "fullTime": 18, "partTime": 7 } },
    "sales": {
      "totalSales": 35911,
      "salesByCategory": [ { "categoryName": "DJ Headphones", "totalSales": 35911 } ]
    },
    "promotionEvents": [
      {
        "discounts": [
          { "categoryName": "DJ Turntables", "discountPercentage": 18 },
          { "categoryName": "DJ Mixers", "discountPercentage": 15 }
        ]
      }
    ],
    "tag": [ "#SeasonalSale", "#FreeShipping", "#MembershipDeals" ]
  }
]

例 3: 割引が 15% を超えるプロモーション イベントをすべて一覧表示する

この例では、割引が 15%を超えるプロモーション イベントをすべて一覧表示します。

db.stores.aggregate([
  {
    $unwind: "$promotionEvents"
  },
  {
    $unwind: "$promotionEvents.discounts"
  },
  {
    $match: {
      "promotionEvents.discounts.discountPercentage": { $gt: 15 }
    }
  },
  {
    $group: {
      _id: "$promotionEvents.eventName",
      discounts: { $push: "$promotionEvents.discounts" }
    }
  }
])

サンプル出力

[
  {
    "discounts": [
      { "categoryName": "Basketball Gear", "discountPercentage": 23 },
      { "categoryName": "Wool Carpets", "discountPercentage": 22 },
      {
        "categoryName": "Portable Bluetooth Speakers",
        "discountPercentage": 24
      }
    ]
  }
]