Definición
Nuevo en la versión 5.0.
Devuelve la tasa de cambio promedio dentro del período especificado. ventana, que se calcula usando lo siguiente:
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 al valor del campo sortBy del último documento.
$derivative solo está disponible en la fase $setWindowFields. Debe especificar una ventana en la $setWindowFields etapa al usar $derivative.
$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. | |
Comportamiento
Debes especificar una ventana en la etapa $setWindowFields al utilizar $derivative.
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
$setWindowFieldsobtiene la velocidad media en millas por hora de cada camión:partitionBy: "$truckID"particiona los documentos de la colección entruckID.sortBy: { timeStamp: 1 }ordena los documentos de cada partición portimeStampen orden ascendente (1), por lo que la lectura del odómetro más temprana aparece primero.outputestablece el valor derivadomilesen un nuevo campo llamadotruckAverageSpeedusando$derivativeque se ejecuta en una ventana de rango.La expresión de entrada está establecida en
"$miles", que se utiliza en el numerador para el cálculo de la derivada.La
$derivativeunidad se establece en"hour"para el campotimeStamp, que se usa 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 de
$matchutiliza el operador de mayor que$gtpara filtrar los resultados a camiones cuya velocidad superó las 50 millas por hora.
En la siguiente salida de 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 }