Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / /

$median (agregação)

Nesta página

  • Definição
  • Sintaxe
  • Campos de comando
  • Comportamento
  • Exemplos
  • Saiba mais
$median

Novidades na versão 7.0.

Retorna uma aproximação damediana do , o percentil 50 , como um valor escalar.

Você pode utilizar o $median como um acumulador na etapa $group ou como uma expressão de escalonamento.

A sintaxe para $median é:

{
$median: {
input: <number>,
method: <string>
}
}

$median usa os seguintes campos:

Campo
Tipo
necessidade
Descrição
input
Expressão
Obrigatório
$median calcula o valor do percentil 50destes dados. input deve ser um nome de campo ou uma expressão que avalia para um tipo numérico. Se a expressão não puder ser convertida em um tipo numérico, o cálculo $median a ignorará.
method
String
Obrigatório
O método que o mongod utiliza para calcular o valor do percentil nº 50. O método deve ser 'approximate'.

Você pode usar $median em:

  • $group estágios como acumulador

  • $setWindowFields estágios como acumulador

  • $project estágios como uma expressão de agregação

$median possui as seguintes características como acumulador, ele:

  • Calcula um único resultado para todos os documentos no estágio.

  • Utiliza o algoritmo t-digest para calcular métricas aproximadas baseadas em percentil.

  • Usa métodos aproximados para dimensionar grandes volumes de dados.

$median tem as seguintes características como uma expressão de agregação, ela:

  • Aceita uma array como entrada

  • Calcula um resultado separado para cada documento de entrada

Em uma etapa $group, $median é um acumulador e calcula um valor para todos os documentos na janela.

Em uma etapa $project, $median é uma expressão de agregação e calcula valores para cada documento.

Em $setWindowFields etapas, o $median retorna um resultado para cada documento como uma expressão de agregação, mas os resultados são calculados sobre grupos de documentos como um acumulador.

Em $group estágios, o $median sempre utiliza um método de cálculo aproximado.

Em $project estágios, o $median pode utilizar o método de cálculo discreto mesmo quando o método aproximado é especificado.

Em $setWindowFields estágios, a carga de trabalho determina o método de cálculo que o $median utiliza.

Os retornos $median dos percentis calculados podem variar, mesmo nos mesmos conjuntos de dados. Isso ocorre porque o algoritmo calcula valores aproximados.

Amostras duplicadas podem causar ambiguidade. Se houver um grande número de duplicatas, os valores percentuais poderão não representar a distribuição real da amostra. Considere um conjunto de dados onde todas as amostras são as mesmas. Todos os valores no conjunto de dados ficam iguais ou abaixo de qualquer percentil. Um valor do "50º percentil" representaria, na verdade, 0 ou 100 por cento das amostras.

Se você usar $median como expressão de agregação em um estágio $project, poderá usar uma array como entrada. $median ignora os valores não numéricos da array.

A sintaxe é:

{
$median:
{
input: [ <expression1, <expression2>, ..., <expressionN> ],
method: <string>
}
}

Uma função de janela permite calcular os resultados em uma "janela" móvel de documentos vizinhos. Conforme cada documento passa pelo pipeline, a etapa $setWindowFields:

  • Recompute o conjunto de documentos na janela atual

  • calcula um valor para todos os documentos no conjunto

  • retorna um único valor para esse documento

Você pode usar $median em um estágio $setWindowFields para calcular estatísticas contínuas para séries temporais ou outros dados relacionados.

Quando você utiliza $median em uma etapa $setWindowField, o valor input deve ser um nome de campo. Se você inserir uma array em vez de um nome de campo, a operação falhará.

Os exemplos a seguir usam a collection testScores. Criar a collection:

db.testScores.insertMany( [
{ studentId: "2345", test01: 62, test02: 81, test03: 80 },
{ studentId: "2356", test01: 60, test02: 83, test03: 79 },
{ studentId: "2358", test01: 67, test02: 82, test03: 78 },
{ studentId: "2367", test01: 64, test02: 72, test03: 77 },
{ studentId: "2369", test01: 60, test02: 53, test03: 72 }
] )

Crie um acumulador que calcule o valor mediano:

db.testScores.aggregate( [
{
$group: {
_id: null,
test01_median: {
$median: {
input: "$test01",
method: 'approximate'
}
}
}
}
] )

Saída:

{ _id: null, test01_median: 62 }

O valor do campo _id é null, portanto, $group seleciona todos os documentos na coleção.

O acumulador do $median obtém sua saída a partir do campo test01. $median calcula o valor mediano para o campo, que é 62 neste exemplo.

Em um estágio $group , $median é um acumulador e calcula um único valor para todos os documentos. Em um estágio $project, $median é uma expressão de agregação e calcula valores para cada documento.

Você pode utilizar um nome de campo ou uma array como entrada em um estágio $project.

db.testScores.aggregate( [
{
$project: {
_id: 0,
studentId: 1,
testMedians: {
$median: {
input: [ "$test01", "$test02", "$test03" ],
method: 'approximate'
}
}
}
}
] )

Saída:

{ studentId: '2345', testMedians: 80 },
{ studentId: '2356', testMedians: 79 },
{ studentId: '2358', testMedians: 78 },
{ studentId: '2367', testMedians: 72 },
{ studentId: '2369', testMedians: 60 }

Quando $median é uma expressão de agregação há um resultado para cada studentId.

Para basear seus valores de percentil em tendências de dados locais, use $median em um estágio de aggregation pipeline de $setWindowField.

Este exemplo cria uma janela para filtrar pontuações:

db.testScores.aggregate( [
{
$setWindowFields: {
sortBy: { test01: 1 },
output: {
test01_median: {
$median: {
input: "$test01",
method: 'approximate'
},
window: {
range: [ -3, 3 ]
}
}
}
}
},
{
$project: {
_id: 0,
studentId: 1,
test01_median: 1
}
}
] )

Saída:

{ studentId: '2356', test01_median: 60 },
{ studentId: '2369', test01_median: 60 },
{ studentId: '2345', test01_median: 60 },
{ studentId: '2367', test01_median: 64 },
{ studentId: '2358', test01_median: 64 }

Neste exemplo, o cálculo da mediana de cada documento também incorpora dados dos três documentos antes e depois dele.

O operador $percentile é uma versão mais geral do operador $median e permite definir um ou mais valores percentuais.

Para mais informações sobre funções da janela, consulte: $setWindowFields.

Voltar

$maxN-array-element