Definição
$percentileNovidades na versão 7.0.
Retorna uma array de valores escalares que correspondem aos valores percentuais especificados.
Disponível nestes estágios:
Observação
Desambiguação
Esta página descreve
$percentilequando usado como um acumulador. Acumuladores retornam um valor agregado em um grupo de documentos de entrada.Você também pode usar
$percentilenestes outros contextos:$percentile (expression), que calcula valores de percentil sobre um array de valores de entrada.$percentile (window function), que é usado no$setWindowFieldsstage para retornar um array de valores de percentil para documentos em uma janela específica.
Sintaxe
{ $percentile: { input: <expression>, p: [ <expression1>, <expression2>, ... ], method: <string> } }
Opções
$percentile usa os seguintes campos:
Campo | Tipo | necessidade | Descrição |
|---|---|---|---|
| Expressão | Obrigatório |
|
| Expressão | Obrigatório |
|
| String | Obrigatório | O método que o MongoDB utiliza para calcular o valor do percentil. O método deve ser |
Comportamento
Quando usado como acumulador, $percentile:
Calcula um conjunto de percentis por grupo, agregado em todos os documentos do grupo.
Usa o algoritmo t-digest para o cálculo de percentis aproximados. A aproximação é necessária para calcular percentis usando uma estrutura de dados de tamanho limitado.
Considerações de cálculo
Quando usado como acumulador, $percentile sempre usa um algoritmo de aproximação. Devido à pseudorandomicidade no algoritmo de aproximação t-digest, os valores de percentil calculados no mesmo conjunto de dados podem diferir em cada execução. Além disso, $percentile pode retornar valores que diferem ligeiramente dos verdadeiros percentis estatísticos.
Exemplo
Os exemplos nesta página usam dados do conjunto de dados sample_mflix. Para obter detalhes sobre como carregar este conjunto de dados em sua implantação do MongoDB autogerenciado, consulte Carregar o conjunto de dados de amostra. Se você fez alguma modificação nos bancos de dados de amostra, talvez seja necessário descartar e recriar os bancos de dados para executar os exemplos nesta página.
Calcular percentil de classificação por gênero
O exemplo a seguir usa o acumulador $percentile para calcular o 50º e o 90º percentil das classificações IMDB para filmes dos gêneros Action e 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 } } ] )
O pipeline anterior:
Usa
$unwindpara criar um documento separado para cada gênero no arraygenres.Usa
$matchpara filtro filmes que são classificados comoActionouDramae têm um campo de classificação IMDB.Agrupa filmes por gênero.
Usa
$percentilepara calcular as avaliações IMDB do 50º e 90º percentil para cada gênero comp: [0.5, 0.9].Usa
$sortpara ordenar a saída por nome de gênero.
O array de saída ratingPercentiles contém dois valores: o 50º percentil e o 90º percentil de classificação IMDB para cada gênero.