$accumulator (カスタムアキュムレータ)

最終更新:2026-10-09

$accumulator (カスタムアキュムレータ)

$accumulator は、$group 内で JavaScript のコールバック — init・accumulate・merge・finalize — を使ってカスタム集計ロジックを定義します。組み込みアキュムレータでは表現できない集計ロジックをカバーします。サーバーサイドの JavaScript で動作するため、ネイティブアキュムレータより遅いです。

カテゴリアキュムレータ
MongoDB バージョン1.0+
例の言語mongosh(シェル)

📝 構文

{ $accumulator: { init: <function>, accumulate: <function>, accumulateArgs: [ <expression> ], merge: <function>, finalize: <function>, lang: "js" } }

戻り値:カスタム集約結果(型は指定した関数で決まります)

▶ 例

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

// $accumulator: Set でアイテムごとの個別価格数をカウント
db.sales.aggregate([
  { $group: { _id: '$item', uniq: {
    $accumulator: {
      init: function() { return new Set(); },
      accumulate: function(set, v) { set.add(v); },
      accumulateArgs: ['$price'],
      merge: function(a, b) { for (var v of b) a.add(v); },
      finalize: function(set) { return set.size; },
      lang: 'js'
    }
  } }
])

出力:

// アイテムごとの個別価格の数

📌 注意事項

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

📚 関連チュートリアル

❓ よくある質問

Q$accumulator の速度は?
Aサーバーサイド JS で動作し、ネイティブアキュムレータより遅いため、避けられるなら避けます。
Q必須のコールバックはどれですか?
Ainit・accumulate・accumulateArgs が必須です。merge と finalize は任意です。
Qサーバーが JavaScript に対応していない場合は?
Aエラーになります。管理者が先にサーバーサイドスクリプトを有効にする必要があります。
Web-Tutorial.com

Web-Tutorial 技術チーム

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

100%