$bucket (バケット)

最終更新:2026-10-09

$bucket (バケット)

$bucket は、昇順の boundaries 配列で定義したバケットにドキュメントを分類し、バケットごとに { _id: lowerBound, count: N } を 1 つ出力します(出力アキュムレータも指定できます)。すべての境界の外にあるドキュメントは default バケットに入ります。ヒストグラムやレンジ統計に最適です。

カテゴリグループ化とウィンドウ
MongoDB バージョン1.0+
例の言語mongosh(シェル)

📝 構文

{ $bucket: { groupBy: <expression>, boundaries: [ <lowerBound>, ... ], default: <value>, output: { <field>: <accumulator> } } }

⚙️ パラメータ

groupByドキュメントがどのバケットに入るかを決定する式。
boundaries昇順のバケット境界の配列。少なくとも2つの値。
defaultすべての境界外のドキュメント用のバケット名。省略したドキュメントは除外されます。
outputバケットごとに計算されるアキュムレータ(例: $avg、$sum)。

戻り値:バケットごとに1つの { _id, count, ... } ドキュメント

▶ 例

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

// $bucket: スコアをレンジに分類し、バケットごとに平均を出力
db.scores.aggregate([
  { $bucket: {
    groupBy: '$score',
    boundaries: [0, 60, 80, 100],
    default: 'other',
    output: { avg: { $avg: '$score' } }
  } }
])

出力:

{ "_id": 0, "count": 12, "avg": 35.5 }
{ "_id": 60, "count": 20, "avg": 71.2 }

📌 注意事項

📚 関連チュートリアル

❓ よくある質問

Q$bucket と $bucketAuto の違いは?
A$bucket は明示的な境界を使います。$bucketAuto は件数が均等になるようにバケットを自動分割します。
Qレンジは半開区間ですか?
Aはい。値は [boundaries[i], boundaries[i+1]) に入り、最後の境界は上限として含まれません。
Qdefault バケットは省略できますか?
Aはい。省略すると全バケットの外のドキュメントは破棄されます。
Web-Tutorial.com

Web-Tutorial 技術チーム

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

100%