MongoDB聚合运算符:$covariancePop


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

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

语法

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

使用

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

  • 会忽略窗口中非数值、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阶段使用$covariancePop操作符输出蛋糕销售orderDate年度和quantity的总体协方差:

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

在本例中:

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

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

在输出中,总体协方差显示在covariancePopForState字段中:

json 复制代码
{ "_id" : 4, "type" : "strawberry", "orderDate" : ISODate("2019-05-18T16:09:01Z"),
  "state" : "CA", "price" : 41, "quantity" : 162, "covariancePopForState" : 0 }
{ "_id" : 0, "type" : "chocolate", "orderDate" : ISODate("2020-05-18T14:10:30Z"),
  "state" : "CA", "price" : 13, "quantity" : 120, "covariancePopForState" : -10.5 }
{ "_id" : 2, "type" : "vanilla", "orderDate" : ISODate("2021-01-11T06:31:15Z"),
  "state" : "CA", "price" : 12, "quantity" : 145, "covariancePopForState" : -5.666666666666671 }
{ "_id" : 5, "type" : "strawberry", "orderDate" : ISODate("2019-01-08T06:12:03Z"),
  "state" : "WA", "price" : 43, "quantity" : 134, "covariancePopForState" : 0 }
{ "_id" : 3, "type" : "vanilla", "orderDate" : ISODate("2020-02-08T13:13:23Z"),
  "state" : "WA", "price" : 13, "quantity" : 104, "covariancePopForState" : -7.5 }
{ "_id" : 1, "type" : "chocolate", "orderDate" : ISODate("2021-03-20T11:30:05Z"),
  "state" : "WA", "price" : 14, "quantity" : 140, "covariancePopForState" : 2 }
相关推荐
18538162800余--1 小时前
短视频矩阵系统贴牌开发实战:批量剪辑文件夹功能设计与实现
线性代数·矩阵·音视频
我言秋日胜春朝★1 小时前
【MySQL】表的CRUD
数据库·mysql
当代红领巾2 小时前
windows 下 oracle 数据库的备份与还原
数据库
新玉54012 小时前
SQL注入
数据库·sql·oracle
阿桨2 小时前
【Prometheus-OracleDB Exporter安装配置指南,开机自启】
数据库·oracle·centos·prometheus
赵渝强老师2 小时前
【赵渝强老师】使用TiDB的审计日志
数据库·tidb
code_shenbing3 小时前
.NET Core 数据库ORM框架用法简述
数据库·c#·.netcore·orm
❀͜͡傀儡师3 小时前
基于Spring Boot 3.0、ShardingSphere、PostgreSQL或达梦数据库的分库分表
数据库·spring boot·postgresql
我真的不会C3 小时前
QT中的多线程
数据库·qt·系统架构
YONG823_API3 小时前
借助电商 API 接口实现电商平台商品数据分析的详细步骤分享
数据库·爬虫·microsoft·数据挖掘·数据分析