View a markdown version of this page

$avg - Amazon DocumentDB

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.

$avg

El operador de $avg agregación de Amazon DocumentDB calcula el valor promedio de la expresión especificada en todos los documentos que se introducen en el escenario. Este operador es útil para calcular el promedio de un campo numérico o una expresión en un conjunto de documentos.

Parámetros

  • expression: La expresión que se va a utilizar para calcular el promedio. Puede ser una ruta de campo (por ejemplo"$field") o una expresión (por ejemplo{ $multiply: ["$field1", "$field2"] }).

Ejemplo (MongoDB Shell)

El siguiente ejemplo muestra cómo utilizar el $avg operador para calcular la puntuación media de un conjunto de documentos de los alumnos.

Cree documentos de muestra

db.students.insertMany([ { name: "John", score: 85 }, { name: "Jane", score: 92 }, { name: "Bob", score: 78 }, { name: "Alice", score: 90 } ]);

Ejemplo de consulta

db.students.aggregate([ { $group: { _id: null, avgScore: { $avg: "$score" } }} ]);

Salida

[ { "_id": null, "avgScore": 86.25 } ]

Ejemplo de uso de un operador de ventana (MongoDB Shell)

Nuevo a partir de la versión 8.0.2.

El $avg operador también se puede utilizar como operador de ventanas en el $setWindowFields escenario. En este contexto, devuelve el promedio de la expresión especificada para los documentos de cada ventana. Especifique el operador en el output campo y, si lo desea, defina los límites de la ventana con un window documento.

Cree documentos de muestra

db.readings.insertMany([ { _id: 1, city: "Denver", day: 1, temp: 70 }, { _id: 2, city: "Denver", day: 2, temp: 80 }, { _id: 3, city: "Seattle", day: 1, temp: 60 }, { _id: 4, city: "Seattle", day: 2, temp: 64 }, { _id: 5, city: "Seattle", day: 3, temp: 68 } ]);

Ejemplo de consulta

En el ejemplo siguiente se dividen los documentoscity, se ordena cada partición y se devuelve una media acumulada day temp desde el principio de la partición hasta el documento actual.

db.readings.aggregate([ { $setWindowFields: { partitionBy: "$city", sortBy: { day: 1 }, output: { runningAvg: { $avg: "$temp", window: { documents: ["unbounded", "current"] } } } } } ]);

Salida

[ { "_id": 1, "city": "Denver", "day": 1, "temp": 70, "runningAvg": 70 }, { "_id": 2, "city": "Denver", "day": 2, "temp": 80, "runningAvg": 75 }, { "_id": 3, "city": "Seattle", "day": 1, "temp": 60, "runningAvg": 60 }, { "_id": 4, "city": "Seattle", "day": 2, "temp": 64, "runningAvg": 62 }, { "_id": 5, "city": "Seattle", "day": 3, "temp": 68, "runningAvg": 64 } ]

Cada documento se complementa con runningAvg el promedio temp de su partición hasta el documento actual, incluido.

Ejemplos de código

Para ver un ejemplo de código sobre el uso $avg del operador, seleccione la pestaña correspondiente al idioma que desee utilizar. Los siguientes ejemplos muestran tanto el uso del acumulador (en$group) como el uso del operador de ventanas (en$setWindowFields):

Node.js
const { MongoClient } = require('mongodb'); async function calculateAvgScore() { 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'); // Accumulator usage: average across grouped documents const students = db.collection('students'); await students.insertMany([ { name: "John", score: 85 }, { name: "Jane", score: 92 }, { name: "Bob", score: 78 }, { name: "Alice", score: 90 } ]); const accumulatorResult = await students.aggregate([ { $group: { _id: null, avgScore: { $avg: '$score' } }} ]).toArray(); console.log('Accumulator result:', accumulatorResult); // Window operator usage: running average within each partition const readings = db.collection('readings'); await readings.insertMany([ { _id: 1, city: "Denver", day: 1, temp: 70 }, { _id: 2, city: "Denver", day: 2, temp: 80 }, { _id: 3, city: "Seattle", day: 1, temp: 60 }, { _id: 4, city: "Seattle", day: 2, temp: 64 }, { _id: 5, city: "Seattle", day: 3, temp: 68 } ]); const windowResult = await readings.aggregate([ { $setWindowFields: { partitionBy: "$city", sortBy: { day: 1 }, output: { runningAvg: { $avg: "$temp", window: { documents: ["unbounded", "current"] } } } } } ]).toArray(); console.log('Window result:', windowResult); await client.close(); } calculateAvgScore();
Python
from pymongo import MongoClient def calculate_avg_score(): client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false') db = client.test # Accumulator usage: average across grouped documents students = db.students students.insert_many([ { 'name': 'John', 'score': 85 }, { 'name': 'Jane', 'score': 92 }, { 'name': 'Bob', 'score': 78 }, { 'name': 'Alice', 'score': 90 } ]) accumulator_result = list(students.aggregate([ { '$group': { '_id': None, 'avgScore': { '$avg': '$score' } }} ])) print('Accumulator result:', accumulator_result) # Window operator usage: running average within each partition readings = db.readings readings.insert_many([ { '_id': 1, 'city': 'Denver', 'day': 1, 'temp': 70 }, { '_id': 2, 'city': 'Denver', 'day': 2, 'temp': 80 }, { '_id': 3, 'city': 'Seattle', 'day': 1, 'temp': 60 }, { '_id': 4, 'city': 'Seattle', 'day': 2, 'temp': 64 }, { '_id': 5, 'city': 'Seattle', 'day': 3, 'temp': 68 } ]) window_result = list(readings.aggregate([ { '$setWindowFields': { 'partitionBy': '$city', 'sortBy': { 'day': 1 }, 'output': { 'runningAvg': { '$avg': '$temp', 'window': { 'documents': ['unbounded', 'current'] } } } } } ])) print('Window result:', window_result) client.close() calculate_avg_score()