Docs Menu

$covariancePop (aggregation)

項目一覧

バージョン 5.0 で追加

$covariancePop

Returns the population covariance of two numeric expressions that are evaluated using documents in the $setWindowFields stage ウィンドウ.

$covariancePop$setWindowFieldsステージでのみ使用可能です。

$covariancePop構文:

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

$covariancePop behavior:

  • ウィンドウ内の数値以外の値、 null値、欠落しているフィールドは無視されます。

  • If the window contains one document, returns null. (Compare to $covarianceSamp, which returns null if the window contains one document.)

  • ウィンドウが空の場合、 はnullを返します。

  • ウィンドウにNaNの値が含まれている場合、 はNaNを返します。

  • If the window contains one or more Infinity value(s) that are all positive or all negative, returns Infinity. The returned Infinity value has the same sign as the Infinity values in the window.

  • If the window contains Infinity values with different signs, returns NaN.

  • If the window contains a decimal value, returns a decimal value.

  • 上記の点のいずれにも当てはまらない場合、 はdouble値を返します。

The returned values in order of precedence are as follows:

  • NaN

  • Infinity

  • decimal

  • double

カリフォルニア州(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 $covariancePop in the $setWindowFields stage to output the population covariance values for the cake sales orderDate year and quantity values:

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 を基準に昇順(1)にソートするため、最も古い orderDate が最初になります。

  • output sets the population covariance values for the orderDate year and quantity values using $covariancePop run in a ドキュメント window.

    The ウィンドウ contains documents between an unbounded lower limit and the current document in the output. This means $covariancePop sets the covariancePopForState field to the population covariance values for the documents between the beginning of the partition and the current document.

In this output, the population covariance is shown in the covariancePopForState field:

{ "_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 }

項目一覧