- Reference >
- Operators >
- Aggregation Pipeline Operators >
- Group Accumulator Operators >
- $stdDevPop (aggregation)
$stdDevPop (aggregation)¶
On this page
Definition¶
- $stdDevPop¶
3.2 新版功能.
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 is available in the $group and $project stages.
When used in the $group stage, $stdDevPop returns the population standard deviation of the specified expression for a group of documents that share the same group by key and has the following syntax:
$stdDevPop has one specified expression as its operand:
{ $stdDevPop: <expression> }
When used in the $project stage, $stdDevPop returns the standard deviation of the specified expression or list of expressions for each document and has one of two syntaxes:
$stdDevPop has one specified expression as its operand:
{ $stdDevPop: <expression> }
$stdDevPop has a list of specified expressions as its operand:
{ $stdDevPop: [ <expression1>, <expression2> ... ] }
The argument for $stdDevPop can be any expression as long as it resolves to an array. For more information on expressions, see Expressions
Behavior¶
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.
Array Operand¶
In the $group stage, if the expression resolves to an array, $stdDevPop treats the operand as a non-numerical value.
In the $project stage:
- With a single expression as its operand, if the expression resolves to an array, $stdDevPop traverses into the array to operate on the numerical elements of the array to return a single value.
- With a list of expressions as its operand, if any of the expressions resolves to an array, $stdDevPop does not traverse into the array but instead treats the array as a non-numerical value.
Examples¶
Use in $group Stage¶
A collection named users contains the following documents:
{ "_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" } } }
])
The operation returns the following results:
{ "_id" : 2, "stdDev" : 8.04155872120988 }
{ "_id" : 1, "stdDev" : 8.04155872120988 }
Use in $project Stage¶
A collection named quizzes contains the following documents:
{
"_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" } } }
])
The operation returns the following results:
{ "_id" : 1, "stdDev" : 8.04155872120988 }
{ "_id" : 2, "stdDev" : 8.04155872120988 }