Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
See how MongoDB 9.0 delivers up to 2x higher throughput.
MongoDB Branding Shape
Register now >
Menu Docs

$percentile (função de janela)

$percentile

Retorna uma array de valores de percentil para os percentis especificados dentro de uma janela.

Observação

Desambiguação

Esta página descreve $percentile quando usado como uma função de janela.

Você também pode usar $percentile nestes outros contextos:

{
$setWindowFields: {
...
output: {
<field>: {
$percentile: {
input: <expression>,
p: [ <expression1>, <expression2>, ... ],
method: <string>
},
}
}
}
}
Campo
Tipo
Descrição

input

Expressão

O campo sobre o qual $percentile calcula valores de percentil. input deve ser uma expressão que avalia para um tipo numérico. Se a expressão não avaliar para um tipo numérico, o cálculo $percentile ignorará este valor.

p

Expressão

$percentile calcula um valor de percentil para cada elemento no p. Esses elementos especificam os quantis a serem calculados e devem ser valores numéricos no intervalo de 0.0 a 1.0, inclusive.

$percentile retorna resultados na mesma ordem que os elementos em p.

method

String

O método que o MongoDB usa para calcular o valor do percentil. O método deve ser 'approximate'.

Em $setWindowFields, $percentile retorna um resultado para cada documento, mas os resultados são calculados em uma janela de documentos.

Quando usado como uma função de janela, $percentile sempre usa um algoritmo de cálculo de percentil preciso em vez de um aproximado, mesmo quando method: 'approximate' é especificado.

Os exemplos nesta página usam dados do conjunto de dados sample_mflix. Para obter detalhes sobre como carregar esse conjunto de dados em sua implantação autogerenciada do MongoDB , consulte Carregar o conjunto de dados de amostra. Se você fez modificações nos bancos de dados de amostra, talvez seja necessário descartar e recriar os bancos de dados para executar os exemplos nesta página.

O exemplo a seguir usa $percentile em um estágio $setWindowFields para encontrar filmes de ação nas 10% das classificações de IMDB para cada ano, de 2002 a 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 }
}
] )

O pipeline anterior:

  • Usa $match para filtrar filmes de ação lançados em 2002, 2003 ou 2004 com pelo menos 5,000 votos IMDB.

  • Utiliza $setWindowFields para dividir filmes por year. Dentro de cada partição, o operador $percentile calcula a 90classificação IMDB percentil utilizando p: [0.9] e uma janela sem limite, armazenada em top10PctRatingForYear.

  • Usa $match com $expr para filtrar filmes cuja classificação no IMDB é maior ou igual à 90ª classificação percentil do ano.

  • Utiliza $project para incluir os campos title, year, imdb_rating e top10PctRatingForYear no resultado.

  • Usa $sort para ordenar os resultados por ano crescente e, em seguida, por classificação decrescente do IMDB.