Definição
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:
$percentile (accumulator), que retorna uma array agregada de valores de percentil em um grupo de documentos de entrada.$percentile (expression), que calcula valores de percentil em uma array de valores de entrada.
Sintaxe
{ $setWindowFields: { ... output: { <field>: { $percentile: { input: <expression>, p: [ <expression1>, <expression2>, ... ], method: <string> }, } } } }
Opções
Campo | Tipo | Descrição |
|---|---|---|
| Expressão | O campo sobre o qual |
| Expressão |
|
| String | O método que o MongoDB usa para calcular o valor do percentil. O método deve ser |
Comportamento
Em $setWindowFields, $percentile retorna um resultado para cada documento, mas os resultados são calculados em uma janela de documentos.
Considerações de cálculo
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.
Exemplo
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
$matchpara filtrar filmes de ação lançados em 2002, 2003 ou 2004 com pelo menos 5,000 votos IMDB.Utiliza
$setWindowFieldspara dividir filmes poryear. Dentro de cada partição, o operador$percentilecalcula a 90classificação IMDB percentil utilizandop: [0.9]e uma janela sem limite, armazenada emtop10PctRatingForYear.Utiliza
$projectpara incluir os campostitle,year,imdb_ratingetop10PctRatingForYearno resultado.Usa
$sortpara ordenar os resultados por ano crescente e, em seguida, por classificação decrescente do IMDB.