On this page
$stdDevSamp (aggregation)
在本页面
Definition
$stdDevSamp
- 3.2 版中的新功能。
计算 Importing 值的 samples 标准偏差。如果值包含总体人口 samples 的数据 samples,则使用该 samples。 $stdDevSamp忽略非数字值。
如果这些值代表整个数据种群,或者您不希望对更大的种群进行概括,请改用$stdDevPop。
$stdDevSamp在$group和$project阶段可用。
在$group阶段中使用时,$stdDevSamp
具有以下语法,并为按键共享同一组的一组文档返回指定表达式的 samples 标准差:
{ $stdDevSamp: <expression> }
在$project阶段中使用时,$stdDevSamp
返回每个文档的指定表达式或表达式列表的 samples 标准偏差,并且具有以下两种语法之一:
$stdDevSamp
有一个指定的表达式作为其操作数:
{ $stdDevSamp: <expression> }
$stdDevSamp
有一个指定表达式的列表作为其操作数:
{ $stdDevSamp: [ <expression1>, <expression2> ... ] }
$stdDevSamp
的参数可以是任何expression,只要它解析为数组即可。有关表达式的更多信息,请参见Expressions。
Behavior
Non-numeric Values
$stdDevSamp忽略非数字值。如果求和的所有操作数均为非数字,则$stdDevSamp返回null
。
Single Value
如果 samples 包含单个数值,则$stdDevSamp返回null
。
Array Operand
在$group阶段,如果表达式解析为数组,则$stdDevSamp将操作数视为非数值。
在$project阶段:
使用单个表达式作为其操作数,如果表达式解析为数组,则$stdDevSamp遍历数组以对数组的数字元素进行操作以返回单个值。
使用表达式列表作为其操作数,如果任何表达式都解析为数组,则$stdDevSamp不会遍历数组,而是将数组视为非数字值。
Example
集合users
包含具有以下字段的文档:
{_id: 0, username: "user0", age: 20}
{_id: 1, username: "user1", age: 42}
{_id: 2, username: "user2", age: 28}
...
要计算用户 samples 的标准差,以下聚合操作首先使用$sample管道对 100 个用户进行采样,然后使用$stdDevSamp计算 samples 用户的标准差。
db.users.aggregate(
[
{ $sample: { size: 100 } },
{ $group: { _id: null, ageStdDev: { $stdDevSamp: "$age" } } }
]
)
该操作返回如下结果:
{ "_id" : null, "ageStdDev" : 7.811258386185771 }