Definición
Nuevo en la versión 5.0.
Devuelve la tasa promedio de cambio dentro de la ventana especificada, que se calcula usando:
Primer y último documento en la etapa
$setWindowFieldsventana.
$derivative solo está disponible en la etapa.$setWindowFields Debe especificar una ventana en la etapa $setWindowFields cuando $derivative utilice.
$derivative sintaxis:
{ $derivative: { input: <expression>, unit: <time unit> } }
$derivative toma un documento con estos campos:
Campo | Descripción |
|---|---|
Especifica la expresión a evaluar. La expresión debe evaluarse a un número. | |
Comportamiento
Debe especificar una ventana en la etapa $setWindowFields cuando $derivative utilice.
Ejemplo
Crea una colección deliveryFleet que contenga las lecturas del odómetro de camiones de entrega 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$derivativeen la etapa$setWindowFieldspara obtener la velocidad promedio en millas por hora para cada camión, y la etapa$matchpara filtrar los resultados a los camiones cuya velocidad superó las 50 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 elmilesvalor derivado en un nuevo campo llamadotruckAverageSpeedusando 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.
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 }