MongoDB聚合运算符:$stdDevSamp
$stdDevSamp聚合运算符用来计算输入值的样本标准差。如果数据样本是总体的一部分并可以概括整体,可以使用
$stdDevSamp。如果样本值代表了数据的总体,或者不希望概括更大的总体,则应该使用
$stdDevPop。
$stdDevSamp可以应用于下面的阶段:
$addFields阶段,从MongoDB3.4开始支持$group阶段$match阶段的$expr表达式$project阶段$replaceRoot阶段,从MongoDB 3.4开始支持$replaceWith阶段,从MongoDB 4.2开始支持$set阶段,从MongoDB 4.2开始支持$setWindowFields阶段,从MongoDB 5.0开始支持
语法
当用于$bucket、$bucketAuto、$group和$setWindowFields阶段时的语法为:
{
$stdDevSamp: <expression> }
当用于其它阶段时,$stdDevSamp的语法有两种形式:
-
操作数为一个表达式:
{ $stdDevSamp: <expression> } -
操作数为一个表达式列表:
{ $stdDevSamp: [ <expression1>, <expression2> ... ] }
<expression>为可解析为数组的表达式。
参数可以是任何能够解析为数组的表达式。
使用
非数值类型的值
$stdDevSamp忽略所有非数值的值,如果所有的操作数都是非数值的值,$stdDevSamp返回null。
单个值
如果样本只有一个数值类型的值,$stdDevSamp返回0。
数组操作数
在$group和$setWindowFields阶段,如果表达式解析为数组,$stdDevSamp会将操作数视为非数字值,对计算没有影响。
针对其它阶段:
- 当使用单个表达式作为操作数时,如果表达式解析为数组,
$stdDevSamp会遍历数组元素,并对数字元素进行操作返回单个值。 - 当使用表达式列表作为操作数,如果表达式解析为数组,
$stdDevSamp不会遍历该数组,而是将数组视为非数字值。
窗口值
对于$setWindowFields阶段窗口的值:
- 忽略窗口中的非数值、空值和缺失字段。
- 如果窗口为空,则返回 null。
- 如果窗口中包含 NaN 值,则返回空值。
- 如果窗口包含 Infinity 值,则返回空值。
- 如果前面几点都不适用,则返回一个 double 值。
举例
应用于$group阶段
users集合有下面的字段:
{
_id: 0, username: "user0", age: 20}
{
_id: 1, username: "user1", age: 42}
{
_id: 2, username: "user2", age: 28}
...
下面的聚合计算用户样本的标准差,首先使用$sample管道阶段对100个用户进行采样,然后使用$stdDevSamp计算用户的样本标准差:
db.users.aggregate(
[
{
$sample: {
size:

最低0.47元/天 解锁文章
1719

被折叠的 条评论
为什么被折叠?



