$stdDevSamp (aggregation)
On this page本页内容
Definition定义
$stdDevSamp
Changed in version 5.0.5.0版更改。
Calculates the sample standard deviation of the input values. 计算输入值的样本标准偏差。Use if the values encompass a sample of a population of data from which to generalize about the population. 如果值包含要从中概括总体数据的总体样本,则使用。$stdDevSamp
ignores non-numeric values.忽略非数值。
If the values represent the entire population of data or you do not wish to generalize about a larger population, use 如果这些值表示整个数据总体,或者您不希望对更大的总体进行概括,请改用$stdDevPop
instead.$stdDevPop
。
$stdDevSamp
is available in these stages:可在以下阶段使用:
$addFields
(Available starting in MongoDB 3.4)(从MongoDB 3.4开始提供)$group
包含$match
stage that includes an$expr
expression$expr
表达式的$match
阶段$project
$replaceRoot
(Available starting in MongoDB 3.4)(从MongoDB 3.4开始提供)$replaceWith
(Available starting in MongoDB 4.2)(从MongoDB 4.2开始提供)$set
(Available starting in MongoDB 4.2)(从MongoDB 4.2开始提供)$setWindowFields
(Available starting in MongoDB 5.0)(从MongoDB 5.0开始提供)
Syntax语法
When used in the 在$bucket
, $bucketAuto
, $group
, and $setWindowFields
stages, $stdDevSamp
has this syntax:$bucket
、$bucketAuto
、$group
和$setWindowFields
阶段中使用时,$stdDevSamp
具有以下语法:
{ $stdDevSamp: <expression> }
When used in other supported stages, 在其它受支持的阶段中使用时,$stdDevSamp
has one of two syntaxes:$stdDevSamp
具有以下两种语法:
$stdDevSamp
has one specified expression as its operand:有一个指定的表达式作为其操作数:{ $stdDevSamp: <expression> }
$stdDevSamp
has a list of specified expressions as its operand:具有指定表达式的列表作为其操作数:{ $stdDevSamp: [ <expression1>, <expression2> ... ] }
The argument for $stdDevSamp
can be any expression as long as it resolves to an array.$stdDevSamp
的参数可以是任何表达式,只要它解析为数组即可。
For more information on expressions, see Expressions.有关表达式的详细信息,请参阅表达式。
Behavior行为
Non-numeric Values非数字值
$stdDevSamp
ignores non-numeric values. 忽略非数值。If all operands for a sum are non-numeric, 如果求和的所有操作数都是非数字的,$stdDevSamp
returns null
.$stdDevSamp
将返回null
。
Single Value单一值
If the sample consists of a single numeric value, 如果样本由单个数值组成,$stdDevSamp
returns null
.$stdDevSamp
将返回null
。
Array Operand数组操作数
In the 在$group
and $setWindowFields
stages, if the expression resolves to an array, $stdDevSamp
treats the operand as a non-numerical value.$group
和$setWindowFields
阶段中,如果表达式解析为数组,则$stdDevSamp
将操作数视为非数值。
In the other supported stages:在其他支持阶段:
With a single expression as its operand, if the expression resolves to an array,以单个表达式作为其操作数,如果表达式解析为数组,则$stdDevSamp
traverses into the array to operate on the numerical elements of the array to return a single value.$stdDevSamp
遍历数组,对数组的数字元素进行运算,以返回单个值。With a list of expressions as its operand, if any of the expressions resolves to an array,以表达式列表作为操作数,如果任何表达式解析为数组,$stdDevSamp
does not traverse into the array but instead treats the array as a non-numerical value.$stdDevSamp
不会遍历到该数组中,而是将该数组视为非数值。
Window Values窗口值
Behavior with values in a 在$setWindowFields
stage window:$setWindowFields
阶段窗口中具有值的行为:
Ignores non-numeric values,忽略窗口中的非数值、null
values, and missing fields in a window.null
值和缺少的字段。If the window is empty, returns如果窗口为空,则返回null
.null
。If the window contains a如果窗口包含NaN
value, returnsnull
.NaN
值,则返回null
。If the window contains如果窗口包含Infinity
values, returnsnull
.Infinity
值,则返回null
。If none of the previous points apply, returns a如果前面的点都不适用,则返回一个double
value.double
值。
Examples实例
Use in $group
Stage在$group
阶段中使用
$group
StageA collection 集合users
contains documents with the following fields:users
包含具有以下字段的文档:
{_id: 0, username: "user0", age: 20}
{_id: 1, username: "user1", age: 42}
{_id: 2, username: "user2", age: 28}
...
To calculate the standard deviation of a sample of users, following aggregation operation first uses the 为了计算用户样本的标准偏差,以下聚合操作首先使用$sample
pipeline to sample 100 users, and then uses $stdDevSamp
calculates the standard deviation for the sampled users.$sample
管道对100个用户进行采样,然后使用$stdDevSamp
计算采样用户的标准偏差。
db.users.aggregate(
[
{ $sample: { size: 100 } },
{ $group: { _id: null, ageStdDev: { $stdDevSamp: "$age" } } }
]
)
The operation returns a result like the following:该操作返回如下结果:
{ "_id" : null, "ageStdDev" : 7.811258386185771 }
Use in $setWindowFields
Stage在$setWindowFields
阶段中使用
$setWindowFields
StageNew in version 5.0. 5.0版新增。
Create a 创建一个包含加利福尼亚州(cakeSales
collection that contains cake sales in the states of California (CA
) and Washington (WA
):CA
)和华盛顿州(WA
)蛋糕销售的cakeSales
系列:
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 本例使用$stdDevSamp
in the $setWindowFields
stage to output the sample standard deviation of the quantity
values of the cake sales for each state
:$setWindowFields
阶段中的$stdDevSamp
来输出每个state
蛋糕销售quantity
值的样本标准差:
db.cakeSales.aggregate( [
{
$setWindowFields: {
partitionBy: "$state",
sortBy: { orderDate: 1 },
output: {
stdDevSampQuantityForState: {
$stdDevSamp: "$quantity",
window: {
documents: [ "unbounded", "current" ]
}
}
}
}
}
] )
In the example:在示例中:
partitionBy: "$state"
partitions the documents in the collection by按state
.state
对集合中的文档进行分区。There are partitions forCA
andWA
.CA
和WA
有分区。sortBy: { orderDate: 1 }
sorts the documents in each partition by按orderDate
in ascending order (1
), so the earliestorderDate
is first.orderDate
按升序(1
)对每个分区中的文档进行排序,因此最早的orderDate
是第一个。
output
sets thestdDevSampQuantityForState
field to the sample standard deviation of thequantity
values using$stdDevSamp
that is run in a documents window.output
使用在文档窗口中运行的$stdDevSamp
将stdDevSampQuantityForState
字段设置为quantity
值的样本标准偏差。The window contains documents between an该窗口包含在unbounded
lower limit and thecurrent
document in the output.unbounded
下限和输出中的current
文档之间的文档。This means这意味着$stdDevSamp
returns the sample standard deviation of thequantity
values for the documents between the beginning of the partition and the current document.$stdDevSamp
返回分区开始和当前文档之间文档quantity
值的样本标准差。
In this output, the sample standard deviation 在该输出中,quantity
value for CA
and WA
is shown in the stdDevSampQuantityForState
field:CA
和WA
的样本标准偏差数量值显示在stdDevSampQuantityForState
字段中:
{ "_id" : 4, "type" : "strawberry", "orderDate" : ISODate("2019-05-18T16:09:01Z"),
"state" : "CA", "price" : 41, "quantity" : 162, "stdDevSampQuantityForState" : null }
{ "_id" : 0, "type" : "chocolate", "orderDate" : ISODate("2020-05-18T14:10:30Z"),
"state" : "CA", "price" : 13, "quantity" : 120, "stdDevSampQuantityForState" : 29.698484809834994 }
{ "_id" : 2, "type" : "vanilla", "orderDate" : ISODate("2021-01-11T06:31:15Z"),
"state" : "CA", "price" : 12, "quantity" : 145, "stdDevSampQuantityForState" : 21.1266025033211 }
{ "_id" : 5, "type" : "strawberry", "orderDate" : ISODate("2019-01-08T06:12:03Z"),
"state" : "WA", "price" : 43, "quantity" : 134, "stdDevSampQuantityForState" : null }
{ "_id" : 3, "type" : "vanilla", "orderDate" : ISODate("2020-02-08T13:13:23Z"),
"state" : "WA", "price" : 13, "quantity" : 104, "stdDevSampQuantityForState" : 21.213203435596427 }
{ "_id" : 1, "type" : "chocolate", "orderDate" : ISODate("2021-03-20T11:30:05Z"),
"state" : "WA", "price" : 14, "quantity" : 140, "stdDevSampQuantityForState" : 19.28730152198591 }