Definición
Nuevo en la versión 5.0.
Devuelve la tasa de cambio promedio dentro del intervalo especificado. ventana, que se calcula usando lo siguiente:
Primer y último documento en la etapa
$setWindowFieldsventana.Numerador, que se establece en el resultado de restar el valor numérico de la expresión para el primer documento del valor de expresión para el ú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 a evaluar. La expresión debe evaluarse a un número. | |
Comportamiento
Debes especificar una ventana en la etapa $setWindowFields al utilizar $derivative.
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 $derivative en la etapa de $setWindowFields para obtener la velocidad promedio en millas por hora de cada camión, y la etapa de $match para filtrar los resultados a 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 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 (se corresponde con el valortimeStampdel documento actual en la salida). Esto significa que$derivativedevuelve la velocidad promedio de cada camión en millas por hora en la ventana de 30 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 }