$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 }

📌 注意事項

さらなる実践ケースを近日公開予定。

📚 関連チュートリアル

❓ よくある質問

Q$reduce で配列の合計を出せますか?
Aはい — initialValue に 0 を置き { $add: ['$$value', '$$this'] } を使います。単純な数値配列なら $sum でも構いません。
Q空の配列の場合は?
Aエラーなく initialValue をそのまま返します。
Q$$value と $$this とは?
A$$value は累積結果、$$this は現在の要素です。どちらも $reduce の in 内でのみ使えます。
Web-Tutorial.com

Web-Tutorial 技術チーム

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

100%