Definición
$percentileNuevo en la versión 7.0.
Devuelve un arreglo de valores escalares que corresponden a los valores de percentil especificados.
Disponible en estas fases:
Nota
Desambiguación
Esta página describe
$percentilecuando se utiliza como acumulador. Los acumuladores devuelven un valor agregado a partir de un grupo de documentos de entrada.También puedes usar
$percentileen estos otros contextos:$percentile (expression), que calcula valores percentiles sobre una matriz de valores de entrada.$percentile (window function), que se utiliza en la etapa$setWindowFieldspara devolver una matriz de valores percentiles para los documentos en una ventana en particular.
Sintaxis
{ $percentile: { input: <expression>, p: [ <expression1>, <expression2>, ... ], method: <string> } }
opciones
$percentile requiere los siguientes campos:
Campo | Tipo | Necesidad | Descripción |
|---|---|---|---|
| expresión | Requerido |
|
| expresión | Requerido |
|
| String | Requerido | El método que usa MongoDB para calcular el valor percentil. El método debe ser |
Comportamiento
Cuando se utiliza como acumulador, $percentile:
Calcula un conjunto de percentiles por grupo, agregados a partir de todos los documentos del grupo.
Utiliza el algoritmo t-digest para el cálculo de percentiles aproximados. La aproximación es necesaria para calcular percentiles utilizando una estructura de datos de tamaño limitado.
Consideraciones de cálculo
Cuando se utiliza como acumulador, $percentile siempre emplea un algoritmo de aproximación. Debido a la pseudoaleatoriedad del algoritmo de aproximación t-digest, los valores percentiles calculados para el mismo conjunto de datos pueden variar en cada ejecución. Además, $percentile puede devolver valores que difieren ligeramente de los percentiles estadísticos reales.
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.
Calcular percentiles de calificación por género
El siguiente ejemplo utiliza el acumulador $percentile para calcular las calificaciones de IMDB del percentil 50 y 90 para películas de los géneros Action y Drama:
db.movies.aggregate( [ { $unwind: "$genres" }, { $match: { genres: { $in: [ "Action", "Drama" ] }, "imdb.rating": { $exists: true } } }, { $group: { _id: "$genres", ratingPercentiles: { $percentile: { input: "$imdb.rating", p: [ 0.5, 0.9 ], method: "approximate" } } } }, { $sort: { _id: 1 } } ] )
La tubería precedente:
Utiliza
$unwindpara crear un documento separado para cada género en el arraygenres.Utiliza
$matchpara filtrar películas que se clasifican comoActionoDramay tienen un campo de calificación de IMDB.Agrupa las películas por género.
Utiliza
$percentilepara calcular las calificaciones de IMDB del percentil 50 y 90 para cada género conp: [0.5, 0.9].Utiliza
$sortpara ordenar la salida por nombre de género.
El array de salida ratingPercentiles contiene dos valores: el percentil 50 y el percentil 90 de la calificación IMDB para cada género.