$covarianceSamp (aggregation)

On this page本页内容

Definition定义

New in version 5.0.在版本5.0中新增

$covarianceSamp

Returns the sample covariance of two numeric expressions that are evaluated using documents in the $setWindowFields stage window.返回使用$setWindowFields阶段窗口中的文档计算的两个数值 表达式的样本协方差。

$covarianceSamp is only available in the $setWindowFields stage.仅在$setWindowFields阶段可用。

$covarianceSamp syntax:语法:

{
   $covarianceSamp: {
      [
         <numeric expression 1>,
         <numeric expression 2>
      ]
   }
}

Behavior行为

$covarianceSamp behavior:行为:

  • Ignores non-numeric values, null values, and missing fields in a window.忽略窗口中的非数值、null值和缺少的字段。
  • If the window contains one document, returns null. 如果窗口包含一个文档,则返回null(Compare to $covariancePop, which returns 0 if the window contains one document.)(与$covariancePop相比,如果窗口包含一个文档,则返回0。)
  • If the window is empty, returns null.如果窗口为空,则返回null
  • If the window contains a NaN value, returns NaN.如果窗口包含NaN值,则返回NaN。
  • If the window contains one or more Infinity value(s) that are all positive or all negative, returns Infinity. 如果窗口包含一个或多个均为正或均为负的Infinity值,则返回InfinityThe returned Infinity value has the same sign as the Infinity values in the window.返回的Infinity值与窗口中的Infinity值具有相同的符号。
  • If the window contains Infinity values with different signs, returns NaN.如果窗口包含具有不同符号的Infinity值,则返回NaN
  • If the window contains a decimal value, returns a decimal value.如果窗口包含decimal值,则返回decimal值。
  • If none of the previous points apply, returns a double value.如果前面的点都不适用,则返回一个double值。

The returned values in order of precedence are as follows:返回值的优先顺序如下:

  • NaN
  • Infinity
  • decimal
  • double

Example示例

Create a cakeSales collection that contains cake sales in the states of California (CA) and Washington (WA):创建包含加利福尼亚州(CA)和华盛顿州(WA)蛋糕销售的cakeSales集合:

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 }
] )

This example uses $covarianceSamp in the $setWindowFields stage to output the sample covariance values for the cake sales orderDate year and quantity values:本示例使用$setWindowFields阶段中的$covarianceSamp输出蛋糕销售orderDate年和quantity值的样本协方差值:

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

In the example:在该示例中:

  • partitionBy: "$state" partitions the documents in the collection by state. state对集合中的文档进行分区There are partitions for CA and WA.有用于CAWA的分区。
  • sortBy: { orderDate: 1 } sorts the documents in each partition by orderDate in ascending order (1), so the earliest orderDate is first.orderDate按升序(1)对每个分区中的文档进行排序,因此最早的orderDate是第一个。
  • output sets the sample covariance values for the orderDate year and quantity values using $covarianceSamp run in a documents window.使用文档窗口中运行的$covarianceSamp设置orderDate年份和quantity值的样本协方差值。

    The window contains documents between an unbounded lower limit and the current document in the output. 窗口包含的文档位于unbounded下限和输出中的current文档之间。This means $covarianceSamp sets the covarianceSampForState field to the sample covariance values for the documents between the beginning of the partition and the current document.这意味着$covarianceSampcovarianceSampForState字段设置为分区开始和当前文档之间的文档的样本协方差值。

In this output, the sample covariance is shown in the covarianceSampForState field:在此输出中,样本协方差显示在covarianceSampForState字段中:

{ "_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 }
←  $covariancePop (aggregation)$dateAdd (aggregation) →