Definición
Devuelve el valor mediano (percentil 50) de los documentos en una ventana especificada. Puede usar $median tanto en ventanas basadas en documentos como en ventanas basadas en rangos.
Nota
Desambiguación
Esta página describe $median cuando se utiliza como función de ventana.
También puedes usar $median en estos otros contextos:
$median (accumulator), utilizado en la agrupación para devolver el valor medio de un grupo de documentos de entrada.$median (expression), que devuelve la mediana de una matriz de valores.
Sintaxis
{ $setWindowFields: { ... output: { <field>: { $median: { input: <expression>, method: <string> } } } } }
Campos de comandos
Campo | Tipo | Necesidad | Descripción |
|---|---|---|---|
| expresión | Requerido | Devuelve los valores sobre los que se calcula la mediana. |
| String | Requerido | El método que |
Comportamiento
Consideraciones de cálculo
Cuando $median se utiliza como función de ventana, siempre utiliza un algoritmo de cálculo de percentiles preciso en lugar de uno aproximado, incluso cuando se especifica method: "approximate".
Ejemplo
Los ejemplos de esta página utilizan datos del conjunto de datos sample_mflix. Para obtener más información sobre cómo cargar este conjunto de datos en su implementación autogestionada de MongoDB, consulte Cargar el conjunto de datos de ejemplo. Si realizó alguna modificación en las bases de datos de ejemplo, es posible que deba eliminarlas y volver a crearlas para ejecutar los ejemplos de esta página.
Este ejemplo utiliza $setWindowFields para calcular la calificación mediana de IMDb para cada película que pertenece a los tres géneros: Aventura, Comedia y Drama. El período abarca el año anterior, el mismo año y el año siguiente (rango [ -1, 1 ]):
db.movies.aggregate( [ { $match: { genres: { $all: ["Adventure", "Comedy", "Drama"] }, year: { $gte: 2000, $lte: 2005 } } }, { $setWindowFields: { sortBy: { year: 1 }, output: { medianRatingByYear: { $median: { input: "$imdb.rating", method: "approximate" }, window: { range: [ -1, 1 ] } } } } }, { $project: { _id: 0, title: 1, year: 1, genres: 1, "imdb.rating": 1, medianRatingByYear: 1 } }, { $sort: { year: 1, "imdb.rating": -1 } }, { $limit: 10 } ] )
En el pipeline anterior:
$matchFiltros para películas que pertenecen a los tres géneros de Aventura, Comedia y Drama, estrenadas entre 2000 y 2005.$setWindowFieldsordena poryearen orden ascendente y aplica$mediancon una ventana basada en rango de[ -1, 1 ]. ElmedianRatingByYearde cada película es la medianaimdb.ratingde las películas en los tres géneros estrenadas dentro de un año de su estreno.$projectincluye solo los campostitle,year,genres,imdb.ratingymedianRatingByYear.$sortordena los resultados poryearen orden ascendente y luego porimdb.ratingen orden descendente.$limitRestringe la salida a los resultados 10 para mejorar la legibilidad.