Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
$bucketAuto
Nuevo a partir de la versión 8.0.2.
La fase de $bucketAuto agregación de Amazon DocumentDB agrupa automáticamente los documentos de entrada en un número específico de cubos en función de una expresión específica. A diferencia $bucket de lo que ocurre cuando se definen los límites de los cubos de forma explícita, los determina $bucketAuto automáticamente para que los documentos se distribuyan de la forma más uniforme posible en el número de cubos solicitado. Esto puede resultar útil cuando desea clasificar los datos en un número fijo de grupos sin conocer de antemano la distribución de los valores.
Parámetros
-
groupBy(obligatorio): expresión que especifica el valor por el que se va a agrupar. -
buckets(obligatorio): un entero positivo que especifica el número de cubos en los que se agrupan los documentos. En función de los documentos de entrada y de lagroupByexpresión, el número real de cubos puede ser inferior al número especificado. -
output(opcional): objeto que especifica la información que se generará para cada bucket. Puedes usar operadores acumuladores como$sum,$avg$min, y$maxpara calcular las agregaciones de cada depósito. Si se omite, cada bucket genera uncountcampo de forma predeterminada. -
granularity(opcional): cadena que especifica la serie numérica que se prefiere usar para los límites del bucket. Esto ajusta los límites calculados a una progresión numérica estándar. Este parámetro solo está disponible si todos losgroupByvalores son numéricos y ninguno de ellos lo es.NaNLos valores válidos son:R5R10,R20,R40,R80,1-2-5,E6,E12,E24,E48,E96E192, yPOWERSOF2.
Salida
Cada bucket se devuelve como un documento independiente que contiene un _id objeto que describe los límites del bucket:
-
_id.min: El límite inferior inclusivo del bucket. -
_id.max: El límite superior del cubo. Este límite es exclusivo para todos los cubos, excepto para el último segmento de la serie, en el que es inclusivo.
Ejemplo (MongoDB Shell)
El siguiente ejemplo muestra cómo usar el $bucketAuto escenario para agrupar los datos de ventas en grupos por precio.
Cree documentos de muestra
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") } ]);
Ejemplo de consulta
El siguiente comando agrupa los documentos de muestra en tres grupos por precio:
db.sales.aggregate([ { $bucketAuto: { groupBy: "$price", buckets: 3, output: { "count": { $sum: 1 }, "totalQuantity": { $sum: "$quantity" } } } } ])
Salida
El comando devuelve el siguiente resultado:
[
{ _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 }
]
Ejemplo de consulta con granularidad
El siguiente ejemplo agrega la granularity opción de ajustar los límites calculados del bucket a potencias de 2.
db.sales.aggregate([ { $bucketAuto: { groupBy: "$price", buckets: 2, granularity: "POWERSOF2", output: { "count": { $sum: 1 }, "totalQuantity": { $sum: "$quantity" } } } } ])
Salida
El comando devuelve el siguiente resultado:
[
{ _id: { min: 4, max: 16 }, count: 3, totalQuantity: 7 },
{ _id: { min: 16, max: 32 }, count: 2, totalQuantity: 2 }
]
Ejemplos de código
Para ver un ejemplo de código sobre el uso del $bucketAuto comando, elige la pestaña del idioma que deseas usar: