Definición
Nuevo en la versión 5.0.
Devuelve la covarianza poblacional de dos valores numéricos expresiones que se evalúan usando documentos en la etapa $setWindowFields ventana.
$covariancePop solo está disponible en la etapa $setWindowFields.
$covariancePop sintaxis:
{ $covariancePop: [ <numeric expression 1>, <numeric expression 2> ] }
Comportamiento
$covariancePop comportamiento:
Ignora los valores no numéricos, valores
nully los campos faltantes en una ventana.Si la ventana contiene un documento, se devuelve
null. (Compárese con$covarianceSamp, que devuelvenullsi la ventana contiene un documento).Si la ventana está vacía, devuelve
null.Si la ventana contiene un valor de
NaN, devuelveNaN.Si la ventana contiene uno o más valores
Infinityque son todos positivos o todos negativos, devuelveInfinity. El valorInfinitydevuelto tiene el mismo signo que los valoresInfinityde la ventana.Si la ventana contiene
Infinityvalores con signos diferentes, devuelveNaN.Si la ventana contiene un valor
decimal, devuelve un valordecimal.Si ninguno de los puntos anteriores aplica, devuelve un valor de
double.
Los valores devueltos en orden de precedencia son los siguientes:
NaNInfinitydecimaldouble
Ejemplo
Crea una colección de cakeSales que incluya ventas de pasteles en el estado de California (CA) y Washington (WA):
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 } ] )
Este ejemplo utiliza $covariancePop en la $setWindowFields etapa para sacar las covarianzas poblacionales de las ventas de pasteles en el orderDate año y los valores quantity:
db.cakeSales.aggregate( [ { $setWindowFields: { partitionBy: "$state", sortBy: { orderDate: 1 }, output: { covariancePopForState: { $covariancePop: [ { $year: "$orderDate" }, "$quantity" ], window: { documents: [ "unbounded", "current" ] } } } } } ] )
En el ejemplo:
partitionBy: "$state"particiona los documentos de la colección enstate. Existen particiones paraCAyWA.sortBy: { orderDate: 1 }ordena los documentos de cada partición pororderDateen orden ascendente (1), de modo que elorderDatemás antiguo sea el primero.
outputestablece los valores de covarianza de la población para el añoorderDatey los valoresquantityusando$covariancePopejecutado en una ventana de documentos.La ventana contiene documentos entre un
unboundedlímite inferior y elcurrentdocumento en el resultado. Esto significa que$covariancePopestablece el campocovariancePopForStatecon los valores de covarianza poblacional para los documentos entre el principio de la partición y el documento actual.
En esta salida, la covarianza poblacional se muestra en el campo covariancePopForState:
{ "_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 }