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 acumulador. Os 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 em uma array de valores de entrada.$percentile (window function), que é usado no estágio$setWindowFieldspara retornar uma 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 usa para calcular o valor do percentil. O método deve ser |
Comportamento
Quando utilizado como acumulador, $percentile:
Calcula um conjunto de percentis por grupo, agregado em todos os documentos do grupo.
Usa o algoritmo t-digest para cálculo de percentis aproximados. A aproximação é necessária para calcular percentis utilizando uma estrutura de dados de tamanho limitado.
Considerações de cálculo
Quando utilizado como acumulador, o $percentile sempre utiliza um algoritmo de aproximação. Devido à pseudo-aleatório 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ísticas.
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.
Calcular percentis de classificação por gênero
O exemplo a seguir usa o acumulador $percentile para calcular as classificações IMDB de 50º e 90º para filmes nos 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 na arraygenres.Usa
$matchpara filtrar filmes classificados comoActionouDramae que tenham um campo de classificação IMDB.Agrupa filmes por gênero.
Usa
$percentilepara calcular as classificações IMDB do 50º e 90º para cada gênero comp: [0.5, 0.9].Usa
$sortpara ordenar a saída por nome do gênero.
A array de saída ratingPercentiles contém dois valores: o 50º percentil e o 90º percentil de classificação IMDB para cada gênero.