Definición
Devuelve una matriz de valores percentiles para los percentiles especificados dentro de una ventana.
Nota
Desambiguación
Esta página describe $percentile cuando se utiliza como función de ventana.
También puedes usar $percentile en estos otros contextos:
$percentile (accumulator), que devuelve una matriz agregada de valores percentiles en un grupo de documentos de entrada.$percentile (expression), que calcula valores percentiles sobre una matriz de valores de entrada.
Sintaxis
{ $setWindowFields: { ... output: { <field>: { $percentile: { input: <expression>, p: [ <expression1>, <expression2>, ... ], method: <string> }, } } } }
opciones
Campo | Tipo | Descripción |
|---|---|---|
| expresión | Campo sobre el cual |
| expresión |
|
| String | El método que usa MongoDB para calcular el valor percentil. El método debe ser |
Comportamiento
En $setWindowFields, $percentile devuelve un resultado para cada documento, pero los resultados se calculan sobre una ventana de documentos.
Consideraciones de cálculo
Cuando se utiliza como función de ventana, $percentile 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.
El siguiente ejemplo utiliza $percentile en una etapa $setWindowFields para encontrar películas de acción en el 10% superior de las calificaciones de IMDB para cada año desde 2002 hasta 2004.
db.movies.aggregate( [ { $match: { year: { $in: [ 2002, 2003, 2004 ] }, genres: "Action", "imdb.votes": { $gte: 5000 }, } }, { $setWindowFields: { partitionBy: "$year", output: { top10PctRatingForYear: { $percentile: { input: "$imdb.rating", p: [ 0.9 ], method: "approximate" }, window: { documents: [ "unbounded", "unbounded" ] } } } } }, { $match: { $expr: { $gte: [ "$imdb.rating", { $arrayElemAt: [ "$top10PctRatingForYear", 0 ] } ] } } }, { $project: { _id: 0, title: 1, year: 1, imdb_rating: "$imdb.rating", top10PctRatingForYear: 1 } }, { $sort: { year: 1, imdb_rating: -1 } } ] )
La tubería precedente:
Utiliza
$matchpara filtrar películas de acción estrenadas en 2002, 2003 o 2004 con al menos 5,000 votos en IMDB.Utiliza
$setWindowFieldspara particionar las películas poryear. Dentro de cada partición, el operador$percentilecalcula la calificación IMDB del percentil 90 utilizandop: [0.9]y una ventana sin límites, almacenada entop10PctRatingForYear.Utiliza
$projectpara incluir los campostitle,year,imdb_ratingytop10PctRatingForYearen la salida.Utiliza
$sortpara ordenar los resultados por año ascendente y luego por calificación de IMDB descendente.