Docs Menu
Docs Home
/ /
Operadores de tuberías de agregación

$derivada (etapa de agregación)

Nuevo en la versión 5.0.

$derivative

Devuelve la tasa de cambio promedio dentro del período especificado. ventana, que se calcula utilizando:

$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 string que especifica la unidad de tiempo. Utilice una de estas cadenas:

  • "week"

  • "day"

  • "hour"

  • "minute"

  • "second"

  • "millisecond"

Si el campo sortBy no es una fecha, debe unit omitir. Si unit especifica, debe especificar una fecha en el campo sortBy.

Debe especificar una ventana en la etapa $setWindowFields cuando $derivative utilice.

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 $setWindowFields camión:

    • partitionBy: "$truckID" particiona los documentos de la colección en truckID.

    • sortBy: { timeStamp: 1 } ordena los documentos en cada partición por timeStamp en orden ascendente1 (), de modo que la lectura del odómetro más antigua es la primera.

    • output Establece el miles valor derivado en un nuevo campo llamado truckAverageSpeed utilizando que se $derivative ejecuta 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 $derivative unidad se establece en "hour" para el timeStamp campo, que se utiliza en el denominador para el cálculo de la derivada.

      • La ventana contiene el rango entre un límite inferior de -30 segundos (los 30 segundos anteriores del documento actual en la salida) y 0 segundos (coincide con el valor del documento actual timeStamp en la salida). Esto significa que devuelve la velocidad promedio de cada camión en millas por hora en $derivative la 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 }

Volver

$denseRank

En esta página