Definición
Devuelve el promedio de los valores numéricos de un grupo de documentos.
El acumulador $avg está disponible en estas etapas:
Nota
Desambiguación
Esta página describe $avg cuando se utiliza como acumulador. Los acumuladores devuelven un único valor agregado, como la suma, el máximo o el mínimo, de un grupo de documentos de entrada.
También puedes usar $avg en estos otros contextos:
$avg (expression), que devuelve el promedio de los elementos numéricos en una matriz.$avg (window function), que se utiliza en la etapa$setWindowFieldspara devolver el promedio de los valores de los documentos en una ventana en particular.
Sintaxis
{ $avg: <expression> }
Comportamiento
Tipo de resultado
El tipo de retorno predeterminado es double. Si al menos un valor de entrada es decimal, el tipo de retorno también será decimal.
Valores no numéricos o faltantes
$avg Ignora los valores no numéricos, incluidos los valores faltantes. Si todos los valores de entrada no son numéricos, $avg devuelve null.
Arreglo Operand
Si el operando se resuelve en una matriz, $avg trata el operando como un valor no numérico.
Ejemplo
Crea una colección sales con los siguientes documentos:
db.sales.insertMany( [ { _id: 1, item: "abc", price: 10, quantity: 2, date: ISODate("2014-01-01T08:00:00Z") }, { _id: 2, item: "jkl", price: 20, quantity: 1, date: ISODate("2014-02-03T09:00:00Z") }, { _id: 3, item: "xyz", price: 5, quantity: 5, date: ISODate("2014-02-03T09:05:00Z") }, { _id: 4, item: "abc", price: 10, quantity: 10, date: ISODate("2014-02-15T08:00:00Z") }, { _id: 5, item: "xyz", price: 5, quantity: 10, date: ISODate("2014-02-15T09:12:00Z") } ] )
La siguiente operación:
Agrupa los documentos por el campo
item.Utiliza el acumulador
$avgpara calcular la cantidad promedio y la cantidad promedio para cada grupo.
db.sales.aggregate( [ { $group: { _id: "$item", avgAmount: { $avg: { $multiply: [ "$price", "$quantity" ] } }, avgQuantity: { $avg: "$quantity" } } } ] )
Salida:
[ { _id: 'xyz', avgAmount: 37.5, avgQuantity: 7.5 }, { _id: 'abc', avgAmount: 60, avgQuantity: 6 }, { _id: 'jkl', avgAmount: 20, avgQuantity: 1 } ]