Definição
Retorna o valor mediano (50º percentil) de documentos em uma janela especificada. Você pode usar $median em janelas baseadas em documentos e em intervalo.
Observação
Desambiguação
Esta página descreve $median quando usado como uma função de janela.
Você também pode usar $median nestes outros contextos:
$median (accumulator), usado em agrupamento para retornar o valor mediano em um grupo de documentos de entrada.$median (expression), que retorna a mediana de uma array de valores.
Sintaxe
{ $setWindowFields: { ... output: { <field>: { $median: { input: <expression>, method: <string> } } } } }
Campos de comando
Campo | Tipo | necessidade | Descrição |
|---|---|---|---|
| Expressão | Obrigatório | Retorna os valores sobre os quais a mediana é calculada. |
| String | Obrigatório | O método que |
Comportamento
Considerações de cálculo
Quando $median é utilizado como uma função de janela, ele 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.
Este exemplo usa $setWindowFields para calcular a classificação mediana do IMDb para cada filme que pertence a todos os três gêneros História, Comédia e Séries de Ação. A janela abrange o ano anterior, o mesmo ano e o ano seguinte (faixa [ -1, 1 ]):
db.movies.aggregate( [ { $match: { genres: { $all: ["Adventure", "Comedy", "Drama"] }, year: { $gte: 2000, $lte: 2005 } } }, { $setWindowFields: { sortBy: { year: 1 }, output: { medianRatingByYear: { $median: { input: "$imdb.rating", method: "approximate" }, window: { range: [ -1, 1 ] } } } } }, { $project: { _id: 0, title: 1, year: 1, genres: 1, "imdb.rating": 1, medianRatingByYear: 1 } }, { $sort: { year: 1, "imdb.rating": -1 } }, { $limit: 10 } ] )
No pipeline anterior:
$matchfiltros para filmes que pertencem a todos os três gêneros de História, Comédia e Séries, lançados entre 2000 e 2005.$setWindowFieldsclassifica poryearem ordem crescente e aplica$mediancom uma janela baseada em intervalo de[ -1, 1 ]. OmedianRatingByYearde cada filme é a mediana deimdb.ratingde filmes em todos os três gêneros lançados dentro de um ano depois.$projectinclui apenas os campostitle,year,genres,imdb.ratingemedianRatingByYear.$sortclassifica os resultados poryearem ordem crescente e, em seguida, porimdb.ratingem ordem decrescente.$limitrestringe a saída a resultados 10 para melhorar a legibilidade.