$group (ドキュメントのグループ化)
最終更新:2026-10-09
$group (ドキュメントのグループ化)
$group は、指定したキー(_id)でドキュメントをグループ化し、グループごとに集計式($sum/$avg/$max など)を適用します。SQL の GROUP BY に相当する、最も強力なパイプラインステージです。_id にはフィールドパス("$field")や複合式でグループキーを定義できます。
| カテゴリ | コアステージ |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ $group: { _id: <group-key>, <field>: { <accumulator>: <expr> }, ... } }
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// $group: ステータスごとに件数と合計を集計
db.orders.aggregate([
{ $group: { _id: "$status", count: { $sum: 1 }, total: { $sum: "$amount" } } }
])
出力:
{ "_id": "A", "count": 2, "total": 380 }
{ "_id": "B", "count": 1, "total": 130 }
📌 注意事項
- _id は必須。null を指定すると全ドキュメントを 1 つのグループにまとめる
- 出力フィールドはアキュムレータか _id 式のみ。元のフィールドは $first/$last で復元する
- $group はドキュメント順を崩す。必要なら後続の $sort で並べ直す
🏷️ 関連タグ
💡 関連ケース
高度な集計パイプライン:複雑な式と変換
集計パイプライン入門:aggregateメソッドと基本ステージ
ブログコメントシステムCRUD実践
Change Streams:リアルタイム変更監視
$facet + $bucket + テキスト/地理空間検索
$lookupと複数コレクションの関連付け
📚 関連チュートリアル
❓ よくある質問
Q$group は SQL の GROUP BY と完全に同じですか?
A核となる部分は同じですがより柔軟です。_id に任意の式を指定でき、集計対象外の列は直接選択できず $first/$push で復元する必要があります。
Q$group で _id は必須ですか?
Aはい。_id がグループキーを定義し、フィールド・式・複合オブジェクトのいずれも指定できます。null を渡すと全ドキュメントが 1 つのグループにまとまります。
Q$group の出力順は安定していますか?
AMongoDB は $group の出力順やグループ化の順序を保証しません。並び順が必要なら後続に $sort ステージを追加してください。