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 }
相关推荐
cg50172 小时前
MySQL数据库复杂的增删改查操作
数据库·mysql
虾球xz3 小时前
游戏引擎学习第147天
数据库·学习·游戏引擎
向上的车轮3 小时前
什么是时序数据库?有哪些时序数据库?常见的运用场景有哪些?
数据库·时序数据库
岱宗夫up5 小时前
【Python】Django 中的算法应用与实现
数据库·python·opencv·django·sqlite
比花花解语5 小时前
使用数据库和缓存的时候,是如何解决数据不一致的问题的?
数据库·缓存·数据一致性
YGGP5 小时前
Redis篇:基础知识总结与基于长期主义的内容更新
数据库·redis·缓存
KINICH ahau6 小时前
数据库1-2章
数据库·oracle
我想吃烤肉肉6 小时前
leetcode-sql数据库面试题冲刺(高频SQL五十题)
数据库·sql·leetcode
夏炎正好眠7 小时前
mysql练习
数据库·mysql
NineData7 小时前
NineData 社区版正式上线,支持一键本地化部署!
数据库·程序员