$sum (合計アキュムレータ)
最終更新:2026-10-09
$sum (合計アキュムレータ)
$sum は、グループ全体での指定フィールドの合計を計算するアキュムレータです(リテラル 1 を渡すと件数になります)。$group 内で合計・件数の集計に使い、$project では配列要素の合計にも使えます。式として使う場合は、入力されたすべてのドキュメントにわたって指定式を合計します。
| カテゴリ | アキュムレータ |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
// $group 内での合計
{ $group: { _id: <key>, total: { $sum: "$field" } } }
// 件数
{ $group: { _id: <key>, count: { $sum: 1 } } }
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// $sum: アイテムごとの合計と件数
db.sales.aggregate([
{ $group: { _id: "$item", total: { $sum: "$price" }, count: { $sum: 1 } } }
])
出力:
{ "_id": "abc", "total": 25, "count": 2 }
{ "_id": "xyz", "total": 30, "count": 3 }
📌 注意事項
- 数値以外の値はスキップされる
- $sum: 1 はグループ内のドキュメントを数える定番の書き方
- $group 内ではグループ全体を集計し、$project 内では配列要素の合計も出せる
🏷️ 関連タグ
💡 関連ケース
📚 関連チュートリアル
❓ よくある質問
Q$sum が文字列フィールドに当たった場合は?
A文字列や数値以外の値はスキップされます(エラーにはなりません)。厳密に扱うなら $toInt/$toDouble で変換するか、$ifNull でデフォルト値を指定してください。
Q$sum アキュムレータは $group 内でしか使えませんか?
Aアキュムレータとしては $group 専用ですが、$sum は通常の集計式としても動作し、たとえば $project 内で配列の合計を求めることもできます。
Q空配列に対する $sum の戻り値は?
A0 を返します。$group で一致ドキュメントがない場合や空配列の場合、$sum は 0 に集計されるため、件数のフォールバックとしても便利です。