Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

$median (operador de acumulación)

$median

Nuevo en la versión 7.0.

Devuelve una aproximación del mediana, el 50percentil, como un valor escalar.

Puedes usar $median como un acumulador en la $group etapa o como una expresión de agregación.

La sintaxis para $median es:

{
$median: {
input: <number>,
method: <string>
}
}

$median requiere los siguientes campos:

Campo
Tipo
Necesidad
Descripción

input

expresión

Requerido

$median calcula el valor del percentil número 50de estos datos. input debe ser un nombre de campo o una expresión que evalúe a un tipo numérico. Si la expresión no puede convertirse en un tipo numérico, el cálculo $median la ignorará.

method

String

Requerido

El método que mongod usa para calcular el valor del 50º percentil. El método debe ser 'approximate'.

Puede usar $median en:

  • $group etapas como un acumulador

  • $setWindowFields etapas como un acumulador

  • $project etapas como una expresión de agregación

$median tiene las siguientes características como acumulador:

  • Calcula un único resultado para todos los documentos en la etapa.

  • Utiliza la t-digest algoritmo para calcular métricas aproximadas basadas en percentiles.

  • Utiliza métodos aproximados para escalar a grandes volúmenes de datos.

$median tiene las siguientes características como expresión de agregación, esta:

  • Acepta un arreglo como entrada

  • Calcula un resultado separado para cada documento de entrada

En una etapa $group, $median es un acumulador y calcula un valor para todos los documentos en la ventana.

En una etapa $project, $median es una expresión de agregación y calcula valores para cada documento.

En $setWindowFields etapas, $median devuelve un resultado para cada documento como una expresión de agregación, pero los resultados se calculan sobre grupos de documentos como un acumulador.

En las fases $group, $median siempre utiliza un método de cálculo aproximado.

En las etapas de $project, $median podría usar el método de cálculo discreto incluso cuando se especifica el método aproximado.

En $setWindowFields etapas, la carga de trabajo determina el método de cálculo que usa $median.

Los percentiles calculados $median que devuelve pueden variar, incluso en los mismos conjuntos de datos. Esto se debe a que el algoritmo calcula valores aproximados.

Las muestras duplicadas pueden causar ambigüedad. Si existe un gran número de duplicados, los valores percentiles pueden no representar la distribución real de la muestra. Considera un conjunto de datos donde todas las muestras son iguales. Todos los valores en el conjunto de datos se encuentran en o por debajo de cualquier percentil. Un valor del "percentil 50" en realidad representaría ya sea el 0 o el 100 por ciento de las muestras.

Si usas $median como expresión de agregación en una etapa de $project, puedes usar un arreglo como entrada. $median ignora los valores no numéricos de un arreglo.

La sintaxis es:

{
$median:
{
input: [ <expression1, <expression2>, ..., <expressionN> ],
method: <string>
}
}

Una función de ventana permite calcular resultados sobre una "ventana" móvil de documentos vecinos. A medida que cada documento pasa por el pipeline, la $setWindowFields etapa:

  • Recalcula el conjunto de documentos en la ventana actual

  • calcula un valor para todos los documentos del conjunto

  • devuelve un solo valor para ese documento

Puede utilizar $median en una etapa $setWindowFields para calcular estadísticas móviles para series de tiempo u otros datos relacionados.

Cuando usas $median en una etapa $setWindowField, el valor input debe ser un nombre de campo. Si introduces un arreglo en lugar de un nombre de campo, la operación falla.

Los siguientes ejemplos utilizan la colección testScores. Crear la colección:

db.testScores.insertMany( [
{ studentId: "2345", test01: 62, test02: 81, test03: 80 },
{ studentId: "2356", test01: 60, test02: 83, test03: 79 },
{ studentId: "2358", test01: 67, test02: 82, test03: 78 },
{ studentId: "2367", test01: 64, test02: 72, test03: 77 },
{ studentId: "2369", test01: 60, test02: 53, test03: 72 }
] )

Crea un acumulador que calcule el valor mediana:

db.testScores.aggregate( [
{
$group: {
_id: null,
test01_median: {
$median: {
input: "$test01",
method: 'approximate'
}
}
}
}
] )

Salida:

{ _id: null, test01_median: 62 }

El valor del campo _id es null, por lo que $group selecciona todos los documentos de la colección.

El acumulador $median toma su entrada del campo test01. $median calcula el valor mediana para el campo, 62 en este ejemplo.

En una etapa $group, $median es un acumulador y calcula un único valor para todos los documentos. En una etapa $project, $median es una expresión de agregación y calcula valores para cada documento.

Se puede utilizar un nombre de campo o un arreglo como entrada en una etapa $project.

db.testScores.aggregate( [
{
$project: {
_id: 0,
studentId: 1,
testMedians: {
$median: {
input: [ "$test01", "$test02", "$test03" ],
method: 'approximate'
}
}
}
}
] )

Salida:

{ studentId: '2345', testMedians: 80 },
{ studentId: '2356', testMedians: 79 },
{ studentId: '2358', testMedians: 78 },
{ studentId: '2367', testMedians: 72 },
{ studentId: '2369', testMedians: 60 }

Cuando $median es una expresión de agregación, hay un resultado para cada studentId.

Para basar los valores de percentiles en las tendencias de datos locales, usa $median en una etapa del pipeline de agregación $setWindowField.

Este ejemplo crea una ventana para filtrar puntuaciones:

db.testScores.aggregate( [
{
$setWindowFields: {
sortBy: { test01: 1 },
output: {
test01_median: {
$median: {
input: "$test01",
method: 'approximate'
},
window: {
range: [ -3, 3 ]
}
}
}
}
},
{
$project: {
_id: 0,
studentId: 1,
test01_median: 1
}
}
] )

Salida:

{ studentId: '2356', test01_median: 60 },
{ studentId: '2369', test01_median: 60 },
{ studentId: '2345', test01_median: 60 },
{ studentId: '2367', test01_median: 64 },
{ studentId: '2358', test01_median: 64 }

En este ejemplo, el cálculo de la mediana para cada documento también incorpora datos de los tres documentos anteriores y posteriores.

El operador $percentile es una versión más general del operador $median que permite establecer uno o más valores percentiles.

Para más información sobre funciones de ventana, consulte: $setWindowFields.

Volver

$maxN

En esta página