$stdDevPop (aggregation)
Nesta página
Definição
Alterado na versão 5.0.
Calculates the population standard deviation of the input values.
Use if the values encompass the entire population of data you want
to represent and do not wish to generalize about a larger
population. $stdDevPop
ignores non-numeric values.
If the values represent only a sample of a population of data from
which to generalize about the population, use $stdDevSamp
instead.
$stdDevPop
está disponível nesses 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> }
When used in other supported stages, $stdDevPop
has one of
two syntaxes:
$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> ... ] }
The argument for $stdDevPop
can be any expressão as long as it resolves to an array.
Para mais informações sobre expressões, consulte Expressões.
Comportamento
Non-numeric Values
$stdDevPop
ignores non-numeric values. If all operands for a
$stdDevPop
are non-numeric, $stdDevPop
returns
null
.
Single Value
If the sample consists of a single numeric value, $stdDevPop
returns 0
.
Operando de array
In the $group
and $setWindowFields
stages,
if the expression resolves to an array, $stdDevPop
treats the
operand as a non-numerical value and has no effect on the calculation.
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.
Window Values
Behavior with values in a $setWindowFields
stage
window:
Ignores non-numeric values,
null
values, and missing fields in a window.If the window is empty, returns
null
.If the window contains a
NaN
value, returnsnull
.If the window contains
Infinity
values, returnsnull
.If none of the previous points apply, returns a
double
value.
Exemplos
Usar no estágio $group
Create a collection called users
with the following documents:
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 } ] )
The following example calculates the standard deviation of each quiz:
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 } ] } ] )
The following example calculates the standard deviation of each quiz:
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 } ] )
This example uses $stdDevPop
in the
$setWindowFields
stage to output the population standard
deviation of the cake sales quantity
for each state
:
db.cakeSales.aggregate( [ { $setWindowFields: { partitionBy: "$state", sortBy: { orderDate: 1 }, output: { stdDevPopQuantityForState: { $stdDevPop: "$quantity", window: { documents: [ "unbounded", "current" ] } } } } } ] )
No exemplo:
partitionBy: "$state"
divide dos documentos na coleção porstate
. Existem divisões paraCA
eWA
.sortBy: { orderDate: 1 }
classifica os documentos em cada divisão pororderDate
em ordem crescente (1
), de modo que aorderDate
mais antiga seja a primeira.
output
sets thestdDevPopQuantityForState
field to thequantity
population standard deviation value using$stdDevPop
that is run in a documentos window.The window contains documents between an
unbounded
lower limit and thecurrent
document in the output. This means$stdDevPop
returns thequantity
population standard deviation value for the documents between the beginning of the partition and the current document.
In this example output, the quantity
population standard deviation
value for CA
and WA
is shown in the
stdDevPopQuantityForState
field:
{ _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 }