Definición
Nuevo en la versión 5.0.
Devuelve la covarianza de muestra de dos números expresiones que se evalúan utilizando documentos en la ventana $setWindowFieldsde la etapa.
$covarianceSamp solo está disponible en la $setWindowFields etapa.
$covarianceSamp sintaxis:
{ $covarianceSamp: [ <numeric expression 1>, <numeric expression 2> ] }
Comportamiento
$covarianceSamp comportamiento:
Ignora valores no numéricos, valores
nully campos faltantes en una ventana.Si la ventana contiene un documento,
nulldevuelve. (Compárese con, que$covariancePopdevuelve0si la ventana contiene un documento).Si la ventana está vacía, devuelve
null.Si la ventana contiene un valor
NaN, devuelveNaN.Si la ventana contiene uno o más valores
Infinity, todos positivos o 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 no se aplica ninguno de los puntos anteriores, devuelve un valor
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 $covarianceSamp en la etapa para generar los valores de covarianza de muestra para las ventas de pasteles $setWindowFields del orderDate año y los quantity valores:
db.cakeSales.aggregate( [ { $setWindowFields: { partitionBy: "$state", sortBy: { orderDate: 1 }, output: { covarianceSampForState: { $covarianceSamp: [ { $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 muestra para elorderDateaño y losquantityvalores utilizando$covarianceSampla ejecución en una ventana de documentos.La ventana contiene documentos entre un
unboundedlímite inferior y elcurrentdocumento en la salida. Esto significa que establece$covarianceSampelcovarianceSampForStatecampo con los valores de covarianza de muestra para los documentos entre el inicio de la partición y el documento actual.
En esta salida, la covarianza de la muestra se muestra en el campo 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 }