View a markdown version of this page

$bucketAuto - Amazon DocumentDB

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

$bucketAuto

Neu ab Version 8.0.2.

Die $bucketAuto Aggregationsphase in Amazon DocumentDB gruppiert Eingabedokumente automatisch auf der Grundlage eines angegebenen Ausdrucks in eine bestimmte Anzahl von Buckets. Im Gegensatz $bucket dazu, wo Sie die Bucket-Grenzen explizit definieren, $bucketAuto werden die Grenzen automatisch bestimmt, sodass die Dokumente so gleichmäßig wie möglich auf die angeforderte Anzahl von Buckets verteilt werden. Dies kann nützlich sein, wenn Sie Daten in eine feste Anzahl von Gruppen einteilen möchten, ohne die Verteilung der Werte im Voraus zu kennen.

Parameter

  • groupBy(erforderlich): Der Ausdruck, der den Wert angibt, nach dem gruppiert werden soll.

  • buckets(erforderlich): Eine positive Ganzzahl, die die Anzahl der Buckets angibt, in die die Dokumente gruppiert sind. Abhängig von den Eingabedokumenten und dem groupBy Ausdruck kann die tatsächliche Anzahl der Buckets unter der angegebenen Anzahl liegen.

  • output(optional): Ein Objekt, das die Informationen angibt, die für jeden Bucket ausgegeben werden sollen. Sie können Akkumulatoroperatoren wie$sum,, und verwenden $avg$min, $max um Aggregationen für jeden Bucket zu berechnen. Wenn dieser Parameter weggelassen wird, gibt jeder Bucket standardmäßig ein count Feld aus.

  • granularity(optional): Eine Zeichenfolge, die die bevorzugte Zahlenreihe angibt, die für die Bucket-Grenzen verwendet werden soll. Dadurch werden die berechneten Grenzen einer numerischen Standardfolge zugeordnet. Dieser Parameter ist nur verfügbar, wenn alle groupBy Werte numerisch sind und keiner davon. NaN Gültige Werte sind: R5R10,R20, R40R80,1-2-5,E6,E12,E24,E48,E96,E192, undPOWERSOF2.

Ausgabe

Jeder Bucket wird als separates Dokument zurückgegeben, das ein _id Objekt enthält, das die Grenzen des Buckets beschreibt:

  • _id.min: Die inklusive Untergrenze des Buckets.

  • _id.max: Die obere Grenze des Eimers. Diese Grenze gilt exklusiv für jeden Bereich, mit Ausnahme des letzten Buckets in der Reihe, für den sie inklusiv ist.

Beispiel (MongoDB Shell)

Das folgende Beispiel zeigt, wie die $bucketAuto Phase verwendet wird, um Verkaufsdaten nach Preis in Gruppen zu gruppieren.

Erstellen Sie Beispieldokumente

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

Beispiel für eine Abfrage

Mit dem folgenden Befehl werden die Beispieldokumente nach Preis in drei Gruppen gruppiert:

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

Ausgabe

Der Befehl gibt die folgende Ausgabe zurück:

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

Abfragebeispiel mit Granularität

Das folgende Beispiel fügt die granularity Option hinzu, die berechneten Bucket-Grenzen mit Potenzen von 2 zu verknüpfen.

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

Ausgabe

Der Befehl gibt die folgende Ausgabe zurück:

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

Codebeispiele

Um ein Codebeispiel für die Verwendung des $bucketAuto Befehls anzuzeigen, wählen Sie die Registerkarte für die Sprache, die Sie verwenden möchten:

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