MongoDB聚合运算符:$stdDevPop
文章目录
$stdDevPop聚合运算符用来计算输入值的总体标准差。如果确认数据代表了整个数据集,且不希望对更大的群体进行归纳,可以使用
$stdDevPop来计算总体标准差。如果数据仅代表了总体的一部分样本,但又想把结论推广到整个数据集,则应该使用
$stdDevSamp。
$stdDevPop可以应用于下面的阶段:
$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阶段时的语法为:
{
$stdDevPop: <expression> }
当用于其它阶段时,$stdDevPop的语法有两种形式:
-
操作数为一个表达式:
{ $stdDevPop: <expression> } -
操作数为一个表达式列表:
{ $stdDevPop: [ <expression1>, <expression2> ... ] }
<expression>为可解析为数组的表达式。
参数可以是任何能够解析为数组的表达式。
使用
非数值类型的值
$stdDevPop忽略所有非数值的值,如果所有的操作数都是非数值的值,$stdDevPop返回null。
单个值
如果样本只有一个数值类型的值,$stdDevPop返回0。
数组操作数
在$group和$setWindowFields阶段,如果表达式解析为数组,$stdDevPop会将操作数视为非数字值,对计算没有影响。
针对其它阶段:
- 当使用单个表达式作为操作数时,如果表达式解析为数组,
$stdDevPop会遍历数组元素,并对数字元素进行操作返回单个值。 - 当使用表达式列表作为操作数,如果表达式解析为数组,
$stdDevPop不会遍历该数组,而是将数组视为非数字值。
窗口值
对于$setWindowFields阶段窗口的值:
- 忽略窗口中的非数值、空值和缺失字段。
- 如果窗口为空,则返回 null。
- 如果窗口中包含 NaN 值,则返回空值。
- 如果窗口包含 Infinity 值,则返回空值。
- 如果前面几点都不适用,则返回一个 double 值。
举例
应用于$group阶段
使用下面的脚本创建users集合:
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

本文详细介绍了MongoDB中的$stdDevPop聚合运算符,用于计算数值数组的整体标准差。文章通过示例展示了如何在$group,$project,$setWindowFields阶段使用此运算符,并讨论了非数值值处理和窗口值的特殊情况。
最低0.47元/天 解锁文章
2414

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



