aggregate() (アグリゲーションパイプライン)

最終更新:2026-10-09

aggregate() (アグリゲーションパイプライン)

aggregate() はドキュメントをグループ化・計算・再形成する多段パイプラインを実行します。例: `db.users.aggregate([{ $group: { _id: '$city', total: { $sum: 1 } } }])`。$match、$group、$sort、$project などのステージがデータを順番に変換します。find() よりはるかに強力で、レポート作成やピボットの定番です。パイプラインはサーバー側で実行され、カーソル(またはインライン結果)を返します。

カテゴリ読み取り
MongoDB バージョン1.0+
例の言語mongosh(シェル)

📝 構文

db.<collection>.aggregate(<pipeline>, { allowDiskUse: <bool> })

⚙️ パラメータ

パイプライン配列パイプラインステージの配列(例: [{$match: {...}}, {$group: {...}}])。
allowDiskUse任意。true にすると 100MB を超える中間結果をディスクに退避できます。

戻り値:集計結果のカーソル。$out/$merge がコレクションに書き込む場合は空。

▶ 例

以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):

// aggregate: 都市ごとにユーザー数を集計する
const result = db.users.aggregate([
  { $group: { _id: '$address.city', total: { $sum: 1 } } },
  { $sort: { total: -1 } }
])
result.toArray()

出力:

[
  { _id: 'Beijing', total: 12 },
  { _id: 'Shanghai', total: 8 }
]

📌 注意事項

📚 関連チュートリアル

❓ よくある質問

Qaggregate と find の違いは何ですか?
Afind() はクエリとプロジェクションのみです。aggregate() はグループ化・カウント・合計・結合ができ、レポート作成向けです。
Qアグリゲーションがメモリ上限を超えたらどうしますか?
A{allowDiskUse: true} を渡して中間結果をディスクに書き出すか、早い段階の $match で最適化します。
Qアグリゲーションの結果はどう消費しますか?
Aカーソルを返すので .toArray() を呼ぶか反復します。$out を使うと結果はコレクションに格納され、カーソルは空で戻ってきます。
Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%