Definición
Devuelve el promedio de los elementos de una matriz numérica.
Nota
Desambiguación
Esta página describe $avg cuando se usa como una expresión que devuelve el promedio de los elementos numéricos en una matriz.
También puedes usar $avg en estos otros contextos:
$avg (accumulator), que devuelve un único valor agregado basado en un número variable de documentos de entrada.$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
Cuando se usa como expresión, $avg tiene una de estas sintaxis:
{ $avg: <expression> }
En esta sintaxis, el operando es una expresión única que se resuelve en un array. $avg recorre el array y devuelve el promedio de sus valores numéricos. Por ejemplo, { $avg: "$testScores" } devuelve el promedio de los valores numéricos del campo testScores del array.
{ $avg: [ <expression1>, <expression2> ... ] }
En esta sintaxis, cada expresión en el array de entrada es un único valor numérico. $avg devuelve el promedio de los valores de entrada individuales. Si alguna de las expresiones de entrada se resuelve en un array, $avg no recorre el array y, en su lugar, lo trata como un valor no numérico.
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.
Ejemplo
Crea una colección students con los siguientes documentos:
db.students.insertMany( [ { _id: 1, quizzes: [ 10, 6, 7 ], labs: [ 5, 8 ], final: 80, midterm: 75 }, { _id: 2, quizzes: [ 9, 10 ], labs: [ 8, 8 ], final: 95, midterm: 80 }, { _id: 3, quizzes: [ 4, 5, 5 ], labs: [ 6, 5 ], final: 78, midterm: 70 } ] )
La siguiente operación utiliza $avg en la etapa $project para calcular promedios para los siguientes campos:
quizzeslabsPromedio combinado de
finalymidterm
db.students.aggregate( [ { $project: { quizAvg: { $avg: "$quizzes"}, labAvg: { $avg: "$labs" }, examAvg: { $avg: [ "$final", "$midterm" ] } } } ] )
Salida
[ { _id: 1, quizAvg: 7.666666666666667, labAvg: 6.5, examAvg: 77.5 }, { _id: 2, quizAvg: 9.5, labAvg: 8, examAvg: 87.5 }, { _id: 3, quizAvg: 4.666666666666667, labAvg: 5.5, examAvg: 74 } ]