$stdDevPop (agregação)
Nesta página
Definição
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:
$setWindowFields
(Disponível a partir do MongoDB 5.0)
Sintaxe
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 Operadores de Expressão.
Comportamento
Valores não numéricos
$stdDevPop
ignora valores não numéricos. Se todos os operandos de um $stdDevPop
forem não numéricos, $stdDevPop
retornará null
.
Valor único
Se a amostra consistir em um único valor numérico, $stdDevPop
retornará 0
.
Operando de array
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.
Valores da janela
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
, retornanull
.Se a janela contiver
Infinity
valores, retornanull
.Se nenhum dos pontos anteriores se aplicar, retorna um valor
double
.
Exemplos
Usar no estágio $group
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 }
Usar no estágio $project
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 }
Usar no estágio $setWindowFields
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 porstate
. Existem partições paraCA
eWA
.sortBy: { orderDate: 1 }
classifica os documentos em cada partição pororderDate
em ordem crescente (1
), para que oorderDate
mais antigo seja o primeiro.
output
define o campostdDevPopQuantityForState
como o valor de desvio padrão da populaçãoquantity
usando$stdDevPop
que é executado em uma janela de documentos .A janela contém documentos entre um limite inferior
unbounded
e o documentocurrent
na saída. Isso significa que$stdDevPop
retorna o valor de desvio padrão da populaçãoquantity
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 }