$reduce (配列を 1 つの値に畳み込む)
最終更新:2026-10-09
$reduce (配列を 1 つの値に畳み込む)
$reduce は配列を 1 つの値に畳み込みます。関数型言語の reduce / fold に相当する集計版です。initialValue と in 式を取り、in 内では $$value が累積値、$$this が現在の要素になります。代表的な用途は、数値配列の合計、文字列の連結、条件を満たす要素のカウントなどです。空の配列は initialValue をそのまま返します。$sum や $concat より汎用的で、任意の累積ロジックを表現できます。
| カテゴリ | 配列 |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ $reduce: { input: <array>, initialValue: <initialValue>, in: <reducer> } }
⚙️ パラメータ
| input | 縮約する配列。 |
|---|---|
| initialValue | アキュムレータの初期値。 |
| in | レデューサーの式。$$value がアキュムレータ、$$this が現在の要素です。 |
戻り値:単一の集約値。空の配列は initialValue を返し、null 入力は null になります
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// $reduce: 配列の合計を計算
db.stats.aggregate([
{ $project: {
total: { $reduce: { input: '$scores', initialValue: 0, in: { $add: ['$$value', '$$this'] } } }
} }
])
出力:
{ '_id': 1, 'total': 285 }
📌 注意事項
- in 内の $$value は累積値、$$this は現在の要素。どちらも組み込み
- 空の配列はエラーなく initialValue を返す
- initialValue の型が結果の型を決める: 0 なら数値、'' なら文字列
🏷️ 関連タグ
💡 関連ケース
さらなる実践ケースを近日公開予定。
📚 関連チュートリアル
❓ よくある質問
Q$reduce で配列の合計を出せますか?
Aはい — initialValue に 0 を置き { $add: ['$$value', '$$this'] } を使います。単純な数値配列なら $sum でも構いません。
Q空の配列の場合は?
Aエラーなく initialValue をそのまま返します。
Q$$value と $$this とは?
A$$value は累積結果、$$this は現在の要素です。どちらも $reduce の in 内でのみ使えます。