Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
See how MongoDB 9.0 delivers up to 2x higher throughput.
MongoDB Branding Shape
Register now >
Docs Menu

$percentil (función de ventana)

$percentile

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:

{
$setWindowFields: {
...
output: {
<field>: {
$percentile: {
input: <expression>,
p: [ <expression1>, <expression2>, ... ],
method: <string>
},
}
}
}
}
Campo
Tipo
Descripción

input

expresión

Campo sobre el cual $percentile calcula los valores percentiles. input debe ser una expresión que se evalúe a un tipo numérico. Si la expresión no se evalúa a un tipo numérico, el cálculo de $percentile ignora ese valor.

p

expresión

$percentile Calcula un valor percentil para cada elemento en p. Estos elementos especifican los cuantiles a calcular y deben ser valores numéricos en el rango de 0.0 a 1.0, ambos inclusive.

$percentile devuelve resultados en el mismo orden que los elementos en p.

method

String

El método que usa MongoDB para calcular el valor percentil. El método debe ser 'approximate'.

En $setWindowFields, $percentile devuelve un resultado para cada documento, pero los resultados se calculan sobre una ventana de documentos.

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'.

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 $match para filtrar películas de acción estrenadas en 2002, 2003 o 2004 con al menos 5,000 votos en IMDB.

  • Utiliza $setWindowFields para particionar las películas por year. Dentro de cada partición, el operador $percentile calcula la calificación IMDB del percentil 90 utilizando p: [0.9] y una ventana sin límites, almacenada en top10PctRatingForYear.

  • Utiliza $match con $expr para filtrar películas cuya calificación de IMDB sea mayor o igual al percentil 90 de calificación para su año.

  • Utiliza $project para incluir los campos title, year, imdb_rating y top10PctRatingForYear en la salida.

  • Utiliza $sort para ordenar los resultados por año ascendente y luego por calificación de IMDB descendente.

Califique esta página