$bucketAuto (自動バケット)
最終更新:2026-10-09
$bucketAuto (自動バケット)
$bucketAuto は、ドキュメントをほぼ均等な件数のバケットに分配します。境界は値の分布から自動計算され、手動の境界は不要です。granularity は境界を正規の数列にスナップします。各出力ドキュメントの _id は { min, max } の境界オブジェクトです。自動ヒストグラムや分布の概観に最適です。
| カテゴリ | グループ化とウィンドウ |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ $bucketAuto: { groupBy: <expression>, buckets: <positive integer>, output: { <field>: <accumulator> }, granularity: <granularity> } }
⚙️ パラメータ
| groupBy | バケットの所属を決定する式。 |
|---|---|
| buckets | 希望するバケット数。正の整数である必要があります。 |
| output | バケットごとのアキュムレータ(例: $avg、$sum)。 |
| granularity | 境界用の標準的な数列(例: R5、1-2-5、E12、POWERSOF2)。 |
戻り値:バケットごとに1つの { _id: { min, max }, count, ... } ドキュメント
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// $bucketAuto: 4 つのバケットに分割し、バケットごとの平均を出力
db.scores.aggregate([
{ $bucketAuto: {
groupBy: '$score',
buckets: 4,
output: { avg: { $avg: '$score' } }
} }
])
出力:
{ "_id": { "min": 0, "max": 45 }, "count": 10, "avg": 22.4 }
{ "_id": { "min": 45, "max": 82 }, "count": 10, "avg": 63.1 }
📌 注意事項
- buckets は目標値で、ドキュメントが少ない場合や値が重複する場合は実際の数が減る
- 出力の _id は { min, max } の境界オブジェクトで半開区間
- granularity は境界を正規の数列にスナップする
🏷️ 関連タグ
💡 関連ケース
📚 関連チュートリアル
❓ よくある質問
Qバケット数は正確ですか?
A常にではありません。ドキュメントが少ない、または値が偏っている場合、要求より少ないバケットになることがあります。
Qgranularity パラメータは何をしますか?
A境界を 1-2-5 や E12 のような正規の数列にスナップし、標準的な刻みを実現します。
Q$bucketAuto と $bucket はどちらを使うべきですか?
A手動の境界なしに均等なバケットが欲しいなら $bucketAuto、カスタム境界が必要なら $bucket を使います。