本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
$bucketAuto
8.0.2 版的新功能。
Amazon DocumentDB $bucketAuto 中的彙總階段會根據指定的表達式,自動將輸入文件分組到指定數量的儲存貯體中。與明確定義儲存貯體界限的 不同$bucket, $bucketAuto會自動決定邊界,以便盡可能平均地分配文件到請求的儲存貯體數量。當您想要將資料分類為固定數量的群組,而不事先知道值的分佈時,這會很有用。
參數
-
groupBy(必要):指定要分組之值的表達式。 -
buckets(必要):正整數,指定文件分組的儲存貯體數量。根據輸入文件和groupBy表達式,儲存貯體的實際數量可以小於指定的數量。 -
output(選用):指定要為每個儲存貯體輸出資訊的物件。您可以使用累積器運算子,例如$sum、$min、$avg和$max來計算每個儲存貯體的彙總。如果省略,每個儲存貯體預設會輸出一個count欄位。 -
granularity(選用):指定要用於儲存貯體邊界的偏好數字序列的字串。這會將運算邊界貼齊標準數值進展。只有在所有groupBy值都是數值,且其中沒有任何值是 時,才能使用此參數NaN。有效值為:R5、R10、R20、R40、R80、1-2-5E6、E12、E24、E48、、E96、E192和POWERSOF2。
輸出
每個儲存貯體都會以個別文件傳回,其中包含描述儲存貯體邊界的_id物件:
-
_id.min:儲存貯體的包含下限。 -
_id.max:儲存貯體的上邊界。除了包含 序列中的最終儲存貯體之外,每個儲存貯體都有此限制。
範例 (MongoDB Shell)
下列範例示範如何使用 $bucketAuto階段,依價格將銷售資料分組到儲存貯體。
建立範例文件
db.sales.insertMany([ { item: "abc", price: 10, quantity: 2, date: new Date("2020-09-01") }, { item: "def", price: 20, quantity: 1, date: new Date("2020-10-01") }, { item: "ghi", price: 5, quantity: 3, date: new Date("2020-11-01") }, { item: "jkl", price: 15, quantity: 2, date: new Date("2020-12-01") }, { item: "mno", price: 25, quantity: 1, date: new Date("2021-01-01") } ]);
查詢範例
下列命令會依價格將範例文件分組為三個儲存貯體:
db.sales.aggregate([ { $bucketAuto: { groupBy: "$price", buckets: 3, output: { "count": { $sum: 1 }, "totalQuantity": { $sum: "$quantity" } } } } ])
輸出
命令會傳回下列輸出:
[
{ _id: { min: 5, max: 15 }, count: 2, totalQuantity: 5 },
{ _id: { min: 15, max: 25 }, count: 2, totalQuantity: 3 },
{ _id: { min: 25, max: 25 }, count: 1, totalQuantity: 1 }
]
具有精細度的查詢範例
下列範例新增 granularity選項,將計算的儲存貯體邊界貼齊 2 的功率。
db.sales.aggregate([ { $bucketAuto: { groupBy: "$price", buckets: 2, granularity: "POWERSOF2", output: { "count": { $sum: 1 }, "totalQuantity": { $sum: "$quantity" } } } } ])
輸出
命令會傳回下列輸出:
[
{ _id: { min: 4, max: 16 }, count: 3, totalQuantity: 7 },
{ _id: { min: 16, max: 32 }, count: 2, totalQuantity: 2 }
]
程式碼範例
若要檢視使用 $bucketAuto命令的程式碼範例,請選擇您要使用的語言標籤: