Definición
Nuevo en la versión 5.0.
Devuelve la tasa de cambio promedio dentro del período especificado. ventana, que se calcula utilizando:
Primer y último documento en la etapa
$setWindowFieldsventana.Numerador, que se establece como el resultado de restar el valor de la expresión numérica del primer documento del valor de la expresión del último documento.
Denominador, que se establece como el resultado de restar el valor del campo sortBy del primer documento del valor del campo sortBy del último documento.
$derivative solo está disponible en la etapa.$setWindowFields Debe especificar una ventana en la etapa $setWindowFields al $derivative usar.
$derivative sintaxis:
{ $derivative: { input: <expression>, unit: <time unit> } }
$derivative toma un documento con estos campos:
Campo | Descripción |
|---|---|
Especifica la expresión que se evaluará. La expresión debe dar como resultado un número. | |
Un
Si el campo sortBy no es una fecha, debe |
Comportamiento
Debe especificar una ventana en la etapa $setWindowFields cuando $derivative utilice.
Ejemplo
Cree una colección deliveryFleet que contenga lecturas del odómetro de los camiones de reparto registradas en intervalos de 30 segundos:
db.deliveryFleet.insertMany( [ { truckID: "1", timeStamp: new Date( "2020-05-18T14:10:30Z" ), miles: 1295.1 }, { truckID: "1", timeStamp: new Date( "2020-05-18T14:11:00Z" ), miles: 1295.63 }, { truckID: "1", timeStamp: new Date( "2020-05-18T14:11:30Z" ), miles: 1296.25 }, { truckID: "1", timeStamp: new Date( "2020-05-18T14:12:00Z" ), miles: 1296.76 }, { truckID: "2", timeStamp: new Date( "2020-05-18T14:10:30Z" ), miles: 10234.1 }, { truckID: "2", timeStamp: new Date( "2020-05-18T14:11:00Z" ), miles: 10234.33 }, { truckID: "2", timeStamp: new Date( "2020-05-18T14:11:30Z" ), miles: 10234.73 }, { truckID: "2", timeStamp: new Date( "2020-05-18T14:12:00Z" ), miles: 10235.13 } ] )
Este ejemplo utiliza $derivative en la etapa para obtener la velocidad promedio en $setWindowFields $match millas 50 por hora para cada camión, y la etapa para filtrar los resultados a los camiones cuya velocidad excedió millas por hora:
db.deliveryFleet.aggregate( [ { $setWindowFields: { partitionBy: "$truckID", sortBy: { timeStamp: 1 }, output: { truckAverageSpeed: { $derivative: { input: "$miles", unit: "hour" }, window: { range: [ -30, 0 ], unit: "second" } } } } }, { $match: { truckAverageSpeed: { $gt: 50 } } } ] )
En el ejemplo:
La etapa obtiene la velocidad promedio en millas por hora para cada
$setWindowFieldscamión:partitionBy: "$truckID"particiona los documentos de la colección entruckID.sortBy: { timeStamp: 1 }ordena los documentos en cada partición portimeStampen orden ascendente1(), de modo que la lectura del odómetro más antigua es la primera.outputEstablece elmilesvalor derivado en un nuevo campo llamadotruckAverageSpeedutilizando que se$derivativeejecuta en una ventana de rango.La expresión de entrada se establece
"$miles"en, que se utiliza en el numerador para el cálculo de la derivada.La
$derivativeunidad se establece en"hour"para eltimeStampcampo, que se utiliza en el denominador para el cálculo de la derivada.La ventana contiene el rango entre un límite inferior de
-30segundos (los 30 segundos anteriores del documento actual en la salida) y0segundos (coincide con el valor del documento actualtimeStampen la salida). Esto significa que devuelve la velocidad promedio de cada camión en millas por hora en$derivativela 30 ventana de segundos.
La etapa
$matchutiliza el operador mayor que$gtpara filtrar los resultados de los camiones cuya velocidad excedió 50 millas por hora.
En el siguiente ejemplo, la velocidad del camión 1 se muestra en el campo truckAverageSpeed. La velocidad del camión 2 no se muestra porque el camión 2 no superó las 50 millas por hora.
{ "_id" : ObjectId("60cb8a7e833dfeadc8e6285c"), "truckID" : "1", "timeStamp" : ISODate("2020-05-18T14:11:00Z"), "miles" : 1295.63, "truckAverageSpeed" : 63.60000000002401 } { "_id" : ObjectId("60cb8a7e833dfeadc8e6285d"), "truckID" : "1", "timeStamp" : ISODate("2020-05-18T14:11:30Z"), "miles" : 1296.25, "truckAverageSpeed" : 74.3999999999869 } { "_id" : ObjectId("60cb8a7e833dfeadc8e6285e"), "truckID" : "1", "timeStamp" : ISODate("2020-05-18T14:12:00Z"), "miles" : 1296.76, "truckAverageSpeed" : 61.199999999998916 }