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:
$stdDevPoptem uma expressão especificada como seu operando:{ $stdDevPop: <expression> } $stdDevPoptem 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.
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
$stdDevPopvalor.Com uma lista de expressões como seu operando, se qualquer uma das expressões for resolvida para uma array,
$stdDevPopnã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
nulle campos ausentes em uma janela.Se a janela estiver vazia, retorna
null.Se a janela contiver um valor
NaN, retornanull.Se a janela contiver
Infinityvalores, 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 paraCAeWA.sortBy: { orderDate: 1 }classifica os documentos em cada partição pororderDateem ordem crescente (1), para que oorderDatemais antigo seja o primeiro.
outputdefine o campostdDevPopQuantityForStatecomo o valor de desvio padrão da populaçãoquantityusando$stdDevPopque é executado em uma janela de documentos .A janela contém documentos entre um limite inferior
unboundede o documentocurrentna saída. Isso significa que$stdDevPopretorna o valor de desvio padrão da populaçãoquantitypara 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 }