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

$stdDevPop (agregação)

Nesta página

  • Definição
  • Sintaxe
  • Comportamento
  • Exemplos
$stdDevPop

Alterado na versão 5.0.

Calcula o desvio padrão da população dos valores de entrada. Use se os valores abrangerem toda a população de dados que você deseja representar e não desejar generalizar sobre uma população maior. $stdDevPop ignora valores não numéricos.

Se os valores representarem apenas uma amostra de uma população de dados a partir dos quais generalizar sobre a população, use $stdDevSamp em vez disso.

$stdDevPop está disponível nestes estágios:

Quando utilizado nos estágios $bucket, $bucketAuto, $group e $setWindowFields, $stdDevPop tem esta sintaxe:

{ $stdDevPop: <expression> }

Quando usado em outros estágios compatíveis, $stdDevPop tem uma de duas sintaxes:

  • $stdDevPop tem uma expressão especificada como seu operando:

    { $stdDevPop: <expression> }
  • $stdDevPop tem uma lista de expressões especificadas como seu operando:

    { $stdDevPop: [ <expression1>, <expression2> ... ] }

O argumento para $stdDevPop pode ser qualquer expressão, desde que seja resolvida em uma array.

Para mais informações sobre expressões, consulte Expressões.

$stdDevPop ignora valores não numéricos. Se todos os operandos de um $stdDevPop forem não numéricos, $stdDevPop retornará null.

Se a amostra consistir em um único valor numérico, $stdDevPop retornará 0.

Nos estágios $group e $setWindowFields , se a expressão for resolvida em uma array, $stdDevPop tratará o operando como um valor não numérico e não terá efeito no cálculo.

Nos outros estágios suportados:

  • Com uma única expressão como operando, se a expressão for resolvida em uma array, percorre a array para operar nos elementos numéricos da array e retornar um único$stdDevPop valor.

  • Com uma lista de expressões como seu operando, se qualquer uma das expressões for resolvida para uma array, $stdDevPop não atravessará a array, mas tratará a array como um valor não numérico.

Comportamento com valores em uma $setWindowFields janela de estágio :

  • Ignora valores não numéricos, valores null e campos ausentes em uma janela.

  • Se a janela estiver vazia, retorna null.

  • Se a janela contiver um valor NaN , retorna null.

  • Se a janela contiver Infinity valores, retorna null.

  • Se nenhum dos pontos anteriores se aplicar, retorna um valor double .

Crie uma coleção chamada users com os seguintes documentos:

db.users.insertMany( [
{ _id : 1, name : "dave123", quiz : 1, score : 85 },
{ _id : 2, name : "dave2", quiz : 1, score : 90 },
{ _id : 3, name : "ahn", quiz : 1, score : 71 },
{ _id : 4, name : "li", quiz : 2, score : 96 },
{ _id : 5, name : "annT", quiz : 2, score : 77 },
{ _id : 6, name : "ty", quiz : 2, score : 82 }
] )

O exemplo a seguir calcula o desvio padrão de cada questionário:

db.users.aggregate( [
{ $group: { _id: "$quiz", stdDev: { $stdDevPop: "$score" } } }
] )

A operação retorna os seguintes resultados:

{ "_id" : 2, "stdDev" : 8.04155872120988 }
{ "_id" : 1, "stdDev" : 8.04155872120988 }

Crie uma collection de exemplo chamada quizzes com os seguintes documentos:

db.quizzes.insertMany( [
{
_id : 1,
scores : [
{ name : "dave123", score : 85 },
{ name : "dave2", score : 90 },
{ name : "ahn", score : 71 }
]
},
{
_id : 2,
scores : [
{ name : "li", quiz : 2, score : 96 },
{ name : "annT", score : 77 },
{ name : "ty", score : 82 }
]
}
] )

O exemplo a seguir calcula o desvio padrão de cada questionário:

db.quizzes.aggregate( [
{ $project: { stdDev: { $stdDevPop: "$scores.score" } } }
] )

A operação retorna os seguintes resultados:

{ _id : 1, stdDev : 8.04155872120988 }
{ _id : 2, stdDev : 8.04155872120988 }

Novidades na versão 5.0.

Crie uma collection cakeSales que contenha vendas de bolo nos estados da Califórnia (CA) e de Washington (WA):

db.cakeSales.insertMany( [
{ _id: 0, type: "chocolate", orderDate: new Date("2020-05-18T14:10:30Z"),
state: "CA", price: 13, quantity: 120 },
{ _id: 1, type: "chocolate", orderDate: new Date("2021-03-20T11:30:05Z"),
state: "WA", price: 14, quantity: 140 },
{ _id: 2, type: "vanilla", orderDate: new Date("2021-01-11T06:31:15Z"),
state: "CA", price: 12, quantity: 145 },
{ _id: 3, type: "vanilla", orderDate: new Date("2020-02-08T13:13:23Z"),
state: "WA", price: 13, quantity: 104 },
{ _id: 4, type: "strawberry", orderDate: new Date("2019-05-18T16:09:01Z"),
state: "CA", price: 41, quantity: 162 },
{ _id: 5, type: "strawberry", orderDate: new Date("2019-01-08T06:12:03Z"),
state: "WA", price: 43, quantity: 134 }
] )

Este exemplo utiliza $stdDevPop no estágio $setWindowFields para produzir o desvio padrão da população das vendas de bolo quantity para cada state:

db.cakeSales.aggregate( [
{
$setWindowFields: {
partitionBy: "$state",
sortBy: { orderDate: 1 },
output: {
stdDevPopQuantityForState: {
$stdDevPop: "$quantity",
window: {
documents: [ "unbounded", "current" ]
}
}
}
}
}
] )

No exemplo:

  • partitionBy: "$state" particiona os documentos na collection por state. Existem partições para CA e WA.

  • sortBy: { orderDate: 1 } classifica os documentos em cada partição por orderDate em ordem crescente (1), para que o orderDate mais antigo seja o primeiro.

  • output define o campo stdDevPopQuantityForState como o valor de desvio padrão da população quantity usando $stdDevPop que é executado em uma janela de documentos .

    A janela contém documentos entre um limite inferior unbounded e o documento current na saída. Isso significa que $stdDevPop retorna o valor de desvio padrão da população quantity para os documentos entre o início da partição e o documento atual.

Neste exemplo de saída, o valor do desvio padrão da população quantity para CA e WA é exibido no campo stdDevPopQuantityForState:

{ _id : 4, type : "strawberry", orderDate : ISODate("2019-05-18T16:09:01Z"),
state : "CA", price : 41, quantity : 162, stdDevPopQuantityForState : 0 }
{ _id : 0, type : "chocolate", orderDate : ISODate("2020-05-18T14:10:30Z"),
state : "CA", price : 13, quantity : 120, stdDevPopQuantityForState : 21 }
{ _id : 2, type : "vanilla", orderDate : ISODate("2021-01-11T06:31:15Z"),
state : "CA", price : 12, quantity : 145, stdDevPopQuantityForState : 17.249798710580816 }
{ _id : 5, type : "strawberry", orderDate : ISODate("2019-01-08T06:12:03Z"),
state : "WA", price : 43, quantity : 134, stdDevPopQuantityForState : 0 }
{ _id : 3, type : "vanilla", orderDate : ISODate("2020-02-08T13:13:23Z"),
state : "WA", price : 13, quantity : 104, stdDevPopQuantityForState : 15 }
{ _id : 1, type : "chocolate", orderDate : ISODate("2021-03-20T11:30:05Z"),
state : "WA", price : 14, quantity : 140, stdDevPopQuantityForState : 15.748015748023622 }

Voltar

$sqrt