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 demgroupByAusdruck 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,$maxum Aggregationen für jeden Bucket zu berechnen. Wenn dieser Parameter weggelassen wird, gibt jeder Bucket standardmäßig eincountFeld 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 allegroupByWerte numerisch sind und keiner davon.NaNGü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: