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对集合文档进行分区,有两个区:CA和WA
  • sortBy: { orderDate: 1 }根据orderDate对每个分区的文档按正序进行排序,orderDate最早的日期排在最前面
  • 在文档窗口中使用$covarianceSamp输出年度orderDate和quantity的样本协方差

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

在输出中,样本协方差显示在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 }
相关推荐
草莓熊Lotso17 分钟前
【C++ 基于微服务的即时通讯系统】etcd + brpc 从安装到服务注册发现全链路实战
网络·数据库·c++·redis·微服务·etcd
Lethehong6 小时前
Oracle 加个字段,目标库就报错?KFS 用“先拆后组“打通异构 DDL
数据库·oracle
Web极客码6 小时前
锁定真正的磁盘卡顿:我用 OpenCode 配合 eBPF 诊断 NVMe 队列深度延迟与 I/O 写放大
数据库·oracle
cspttty7 小时前
2027用户研究求职准备:应用统计学如何补齐研究设计与业务表达
大数据·数据库
Rocky Ding*7 小时前
FLUX 3 Image Klein 技术解析:5.6B 生成器、Flow Map 蒸馏与 ComfyUI 可控编辑
论文阅读·人工智能·深度学习·机器学习·aigc·flux·ai-native
roman_日积跬步-终至千里8 小时前
【数据Agent论文·查询与语义|05】Spider:为什么换一个数据库,模型就不会查了?
数据库·数据分析
workflower8 小时前
Agentic AI 时代的企业ICT 基础设施运维
运维·人工智能·机器学习·重构·云计算·汽车
猫咪很可爱8 小时前
Oracle RAC 启动失败排查:私网通信与内核参数优化实战
运维·数据库·oracle
XLYcmy8 小时前
《数字经济赋能城市低碳治理的路径研究检索报告》审阅与修改指导意见——基于完整检索报告体例的完整性诊断、学术规范核查与方法论纠偏 上
数据库·ai·chatgpt·文心一言·检索·知网·豆包
泡海椒9 小时前
JQuick-SQL 快速开始:注册内存表并执行查询
数据库·windows·sql