Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Tahap $bucket dalam alur agregasi mengelompokkan dokumen input ke dalam wadah berdasarkan batas yang ditentukan. Ini sangat berguna untuk membuat histogram atau mengategorikan data ke dalam rentang. Ini memungkinkan Anda untuk menentukan batas wadah kustom dan menyediakan cara untuk meringkas data dalam rentang ini.
Syntax
{
$bucket: {
groupBy: <expression>,
boundaries: [ <lowerBoundary>, <upperBoundary>, ... ],
default: <defaultBucket>,
output: {
<outputField1>: { <accumulator1> },
...
}
}
}
Parameter-parameternya
| Pengaturan | Description |
|---|---|
groupBy |
Ekspresi untuk mengelompokkan dokumen menurut. |
boundaries |
Array nilai batas untuk menentukan wadah. Array harus diurutkan dalam urutan naik dan menyertakan setidaknya dua nilai. |
default |
Nama wadah untuk dokumen yang tidak termasuk dalam batas yang ditentukan. |
output |
Bidang opsional untuk menentukan bidang komputasi untuk setiap wadah. |
Examples
Pertimbangkan dokumen sampel ini dari koleksi toko.
{
"_id": "0fcc0bf0-ed18-4ab8-b558-9848e18058f4",
"name": "First Up Consultants | Beverage Shop - Satterfieldmouth",
"location": {
"lat": -89.2384,
"lon": -46.4012
},
"staff": {
"totalStaff": {
"fullTime": 8,
"partTime": 20
}
},
"sales": {
"totalSales": 75670,
"salesByCategory": [
{
"categoryName": "Wine Accessories",
"totalSales": 34440
},
{
"categoryName": "Bitters",
"totalSales": 39496
},
{
"categoryName": "Rum",
"totalSales": 1734
}
]
},
"promotionEvents": [
{
"eventName": "Unbeatable Bargain Bash",
"promotionalDates": {
"startDate": {
"Year": 2024,
"Month": 6,
"Day": 23
},
"endDate": {
"Year": 2024,
"Month": 7,
"Day": 2
}
},
"discounts": [
{
"categoryName": "Whiskey",
"discountPercentage": 7
},
{
"categoryName": "Bitters",
"discountPercentage": 15
},
{
"categoryName": "Brandy",
"discountPercentage": 8
},
{
"categoryName": "Sports Drinks",
"discountPercentage": 22
},
{
"categoryName": "Vodka",
"discountPercentage": 19
}
]
},
{
"eventName": "Steal of a Deal Days",
"promotionalDates": {
"startDate": {
"Year": 2024,
"Month": 9,
"Day": 21
},
"endDate": {
"Year": 2024,
"Month": 9,
"Day": 29
}
},
"discounts": [
{
"categoryName": "Organic Wine",
"discountPercentage": 19
},
{
"categoryName": "White Wine",
"discountPercentage": 20
},
{
"categoryName": "Sparkling Wine",
"discountPercentage": 19
},
{
"categoryName": "Whiskey",
"discountPercentage": 17
},
{
"categoryName": "Vodka",
"discountPercentage": 23
}
]
}
]
}
Contoh 1: Mengategorikan fullSales ke dalam rentang
Kueri ini mengategorikan fullSales bidang ke dalam tiga wadah: [0, 1000), [1000, 5000), dan [5000, 10000). Dokumen yang tidak termasuk dalam rentang ini dikelompokkan ke dalam wadah default.
db.stores.aggregate([
{
$bucket: {
groupBy: "$sales.fullSales",
boundaries: [0, 1000, 5000, 10000],
default: "Other",
output: {
count: { $sum: 1 },
totalSales: { $sum: "$sales.fullSales" }
}
}
}
])
Kueri ini mengembalikan hasil berikut:
[
{ "_id": 1000, "count": 1, "totalSales": 3700 },
{ "_id": "Other", "count": 41504, "totalSales": 0 }
]