View a markdown version of this page

$bucketAuto - Amazon DocumentDB

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

$bucketAuto

Baru dari versi 8.0.2.

T $bucketAuto ahap agregasi di Amazon DocumentDB secara otomatis mengelompokkan dokumen masukan ke dalam jumlah bucket tertentu berdasarkan ekspresi tertentu. Tidak seperti$bucket, di mana Anda menentukan batas bucket secara eksplisit, $bucketAuto secara otomatis menentukan batas sehingga dokumen didistribusikan secara merata di seluruh jumlah bucket yang diminta. Ini dapat berguna ketika Anda ingin mengkategorikan data ke dalam jumlah grup tetap tanpa mengetahui distribusi nilai terlebih dahulu.

Parameter

  • groupBy(wajib): Ekspresi yang menentukan nilai yang akan dikelompokkan.

  • buckets(wajib): Bilangan bulat positif yang menentukan jumlah bucket tempat dokumen dikelompokkan. Tergantung pada dokumen input dan groupBy ekspresi, jumlah bucket sebenarnya bisa kurang dari jumlah yang ditentukan.

  • output(opsional): Objek yang menentukan informasi yang akan dikeluarkan untuk setiap bucket. Anda dapat menggunakan operator akumulator seperti$sum,, $avg$min, dan $max untuk menghitung agregasi untuk setiap bucket. Jika dihilangkan, setiap bucket menampilkan count bidang secara default.

  • granularity(opsional): Sebuah string yang menentukan seri angka yang disukai untuk digunakan untuk batas bucket. Ini mengubah batas yang dihitung ke perkembangan numerik standar. Parameter ini hanya tersedia jika semua groupBy nilai numerik dan tidak satupun dari merekaNaN. Nilai yang valid adalah: R5R10,R20,R40,R80,1-2-5,E6,E12,E24,E48,E96,E192, danPOWERSOF2.

Keluaran

Setiap bucket dikembalikan sebagai dokumen terpisah yang berisi _id objek yang menggambarkan batas-batas bucket:

  • _id.min: Batas bawah inklusif ember.

  • _id.max: Batas atas ember. Ikatan ini eksklusif untuk setiap bucket kecuali bucket terakhir dalam seri, di mana itu inklusif.

Contoh (MongoDB Shell)

Contoh berikut menunjukkan cara menggunakan $bucketAuto tahap untuk mengelompokkan data penjualan ke dalam bucket berdasarkan harga.

Buat dokumen sampel

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") } ]);

Contoh kueri

Perintah berikut mengelompokkan dokumen sampel ke dalam tiga bucket berdasarkan harga:

db.sales.aggregate([ { $bucketAuto: { groupBy: "$price", buckets: 3, output: { "count": { $sum: 1 }, "totalQuantity": { $sum: "$quantity" } } } } ])

Keluaran

Perintah mengembalikan output berikut:

[ { _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 } ]

Contoh kueri dengan granularitas

Contoh berikut menambahkan granularity opsi untuk memasang batas bucket yang dihitung ke pangkat 2.

db.sales.aggregate([ { $bucketAuto: { groupBy: "$price", buckets: 2, granularity: "POWERSOF2", output: { "count": { $sum: 1 }, "totalQuantity": { $sum: "$quantity" } } } } ])

Keluaran

Perintah mengembalikan output berikut:

[ { _id: { min: 4, max: 16 }, count: 3, totalQuantity: 7 }, { _id: { min: 16, max: 32 }, count: 2, totalQuantity: 2 } ]

Contoh kode

Untuk melihat contoh kode untuk menggunakan $bucketAuto perintah, pilih tab untuk bahasa yang ingin Anda gunakan:

Node.js
const { MongoClient } = require('mongodb'); async function example() { const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false'); const db = client.db('test'); const sales = db.collection('sales'); const result = await sales.aggregate([ { $bucketAuto: { groupBy: "$price", buckets: 3, output: { "count": { $sum: 1 }, "totalQuantity": { $sum: "$quantity" } } } } ]).toArray(); console.log(result); client.close(); } example();
Python
from pymongo import MongoClient def example(): client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false') db = client['test'] sales = db['sales'] result = list(sales.aggregate([ { '$bucketAuto': { 'groupBy': '$price', 'buckets': 3, 'output': { 'count': {'$sum': 1}, 'totalQuantity': {'$sum': '$quantity'} } } } ])) print(result) client.close() example()