MongoDB聚合运算符:$stdDevSamp

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: {
   
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

原子星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值