MongoDB聚合运算符:$covarianceSamp

文章目录

$covarianceSamp聚合运算符返回使用$setWindowFields阶段窗口中的文档计算的两个数值表达式的样本协方差。

$covarianceSamp运算符只能用于$setWindowFields阶段。

语法

js 复制代码
{
   $covarianceSamp: {
      [
         <numeric expression 1>,
         <numeric expression 2>
      ]
   }
}

使用

$covarianceSamp使用时遵守以下规则:

  • 会忽略窗口中非数值、null和缺失字段的值
  • 如果窗口只有一个文档,则返回null
  • 如果窗口为空,返回null
  • 如果窗口包含NaN则返回NaN
  • 如果窗口包含一个或多个全是正无穷或全是负无穷值,返回的无穷值的符号与窗口值一致
  • 如果窗口包含的无穷值符号不同,返回NaN
  • 如果窗口包含小数值,返回小数值
  • 如果以上都不适用,返回双精度数

返回值的优先顺序:

  • NaN
  • 无穷
  • 小数
  • 双精度数

举例

使用下面的命令创建cakeSales,它包含了在加利福尼亚California (CA)和华盛顿Washington (WA)的蛋糕销售记录:

js 复制代码
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 }
] )

下面的例子在$setWindowFields阶段使用$covarianceSamp操作符输出蛋糕销售orderDate年度和quantity的样本协方差:

js 复制代码
db.cakeSales.aggregate( [
   {
      $setWindowFields: {
         partitionBy: "$state",
         sortBy: { orderDate: 1 },
         output: {
            covariancePopForState: {
               $covarianceSamp: [ { $year: "$orderDate" }, "$quantity" ],
               window: {
                  documents: [ "unbounded", "current" ]
               }
            }
         }
      }
   }
] )

在本例中:

  • partitionBy: "$state"依据state对集合文档进行分区,有两个区:CAWA
  • sortBy: { orderDate: 1 }根据orderDate对每个分区的文档按正序进行排序,orderDate最早的日期排在最前面
  • 在文档窗口中使用$covarianceSamp输出年度orderDatequantity的样本协方差

该窗口包含的文档介于无限制的下限和输出的当前文档之间,这意味着$covarianceSampcovariancePopForState字段设置为分区开始和当前文档之间文档的样本协方差值。

在输出中,样本协方差显示在covariancePopForState字段中:

json 复制代码
{ "_id" : 4, "type" : "strawberry", "orderDate" : ISODate("2019-05-18T16:09:01Z"),
  "state" : "CA", "price" : 41, "quantity" : 162, "covarianceSampForState" : null }
{ "_id" : 0, "type" : "chocolate", "orderDate" : ISODate("2020-05-18T14:10:30Z"),
  "state" : "CA", "price" : 13, "quantity" : 120, "covarianceSampForState" : -21 }
{ "_id" : 2, "type" : "vanilla", "orderDate" : ISODate("2021-01-11T06:31:15Z"),
  "state" : "CA", "price" : 12, "quantity" : 145, "covarianceSampForState" : -8.500000000000007 }
{ "_id" : 5, "type" : "strawberry", "orderDate" : ISODate("2019-01-08T06:12:03Z"),
  "state" : "WA", "price" : 43, "quantity" : 134, "covarianceSampForState" : null }
{ "_id" : 3, "type" : "vanilla", "orderDate" : ISODate("2020-02-08T13:13:23Z"),
  "state" : "WA", "price" : 13, "quantity" : 104, "covarianceSampForState" : -15 }
{ "_id" : 1, "type" : "chocolate", "orderDate" : ISODate("2021-03-20T11:30:05Z"),
  "state" : "WA", "price" : 14, "quantity" : 140, "covarianceSampForState" : 3 }
相关推荐
一灰灰blog7 分钟前
Spring AI中的多轮对话艺术:让大模型主动提问获取明确需求
数据库·人工智能·spring
Nandeska39 分钟前
15、基于MySQL的组复制
数据库·mysql
AllData公司负责人1 小时前
AllData数据中台-数据同步平台【Seatunnel-Web】整库同步MySQL同步Doris能力演示
大数据·数据库·mysql·开源
加油,小猿猿1 小时前
Java开发日志-双数据库事务问题
java·开发语言·数据库
山岚的运维笔记2 小时前
SQL Server笔记 -- 第20章:TRY/CATCH
java·数据库·笔记·sql·microsoft·sqlserver
Gain_chance2 小时前
33-学习笔记尚硅谷数仓搭建-DWS层交易域用户粒度订单表分析及设计代码
数据库·数据仓库·hive·笔记·学习·datagrip
未来之窗软件服务2 小时前
计算机等级考试—高频英语词汇—东方仙盟练气期
数据库·计算机软考·东方仙盟
lekami_兰2 小时前
MySQL 长事务:藏在业务里的性能 “隐形杀手”
数据库·mysql·go·长事务
JQLvopkk3 小时前
C# 轻量级工业温湿度监控系统(含数据库与源码)
开发语言·数据库·c#
小瑞瑞acd3 小时前
【小瑞瑞精讲】卷积神经网络(CNN):从入门到精通,计算机如何“看”懂世界?
人工智能·python·深度学习·神经网络·机器学习