View a markdown version of this page

$bucketAuto - Amazon DocumentDB

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

$bucketAuto

Nuovo dalla versione 8.0.2.

La fase di $bucketAuto aggregazione in Amazon DocumentDB raggruppa automaticamente i documenti di input in un numero specificato di bucket in base a un'espressione specificata. A differenza $bucket di quanto avviene quando si definiscono esplicitamente i limiti dei bucket, i limiti $bucketAuto vengono determinati automaticamente in modo che i documenti siano distribuiti nel modo più uniforme possibile sul numero di bucket richiesto. Ciò può essere utile quando si desidera classificare i dati in un numero fisso di gruppi senza conoscere in anticipo la distribuzione dei valori.

Parametri

  • groupBy(obbligatorio): l'espressione che specifica il valore in base al quale raggruppare.

  • buckets(obbligatorio): un numero intero positivo che specifica il numero di bucket in cui sono raggruppati i documenti. A seconda dei documenti di input e dell'groupByespressione, il numero effettivo di bucket può essere inferiore al numero specificato.

  • output(opzionale): un oggetto che specifica le informazioni da emettere per ogni bucket. È possibile utilizzare operatori di accumulo come$sum, $avg$min, e $max per calcolare le aggregazioni per ogni bucket. Se omesso, ogni bucket genera un campo per impostazione predefinita. count

  • granularity(opzionale): una stringa che specifica la serie numerica preferita da utilizzare per i limiti del bucket. Questo aggancia i limiti calcolati a una progressione numerica standard. Questo parametro è disponibile solo se tutti i groupBy valori sono numerici e nessuno lo è. NaN I valori validi sono: R5R10,R20,R40,R80,1-2-5,E6,E12,E24,,E48, E96E192, ePOWERSOF2.

Output

Ogni bucket viene restituito come documento separato che contiene un _id oggetto che descrive i limiti del bucket:

  • _id.min: Il limite inferiore incluso del bucket.

  • _id.max: Il limite superiore del secchio. Questo limite è esclusivo per ogni bucket tranne l'ultimo bucket della serie, dove è incluso.

Esempio (MongoDB Shell)

L'esempio seguente dimostra come utilizzare la $bucketAuto fase per raggruppare i dati di vendita in bucket in base al prezzo.

Crea documenti di esempio

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

Esempio di interrogazione

Il comando seguente raggruppa i documenti di esempio in tre fasce in base al prezzo:

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

Output

Questo comando restituisce il seguente output:

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

Esempio di interrogazione con granularità

L'esempio seguente aggiunge l'granularityopzione per agganciare i limiti del bucket calcolati a potenze di 2.

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

Output

Questo comando restituisce il seguente output:

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

Esempi di codice

Per visualizzare un esempio di codice per l'utilizzo del $bucketAuto comando, scegliete la scheda corrispondente alla lingua che desiderate utilizzare:

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()