Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

$derivative (ventana) (operador de expresión)

Nuevo en la versión 5.0.

$derivative

Devuelve la tasa promedio de cambio dentro de la ventana especificada, que se calcula usando:

  • Primer y último documento en la etapa $setWindowFields ventana.

  • 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 is only available in the $setWindowFields stage. You must specify a window in the $setWindowFields stage when using $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.

Un string que especifica la unidad de tiempo. Usa una de estas cadenas:

  • "week"

  • "day"

  • "hour"

  • "minute"

  • "second"

  • "millisecond"

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

You must specify a window in the $setWindowFields stage when using $derivative.

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 }
] )

This example uses $derivative in the $setWindowFields stage to obtain the average speed in miles per hour for each truck, and the $match stage to filter the results to trucks whose speed exceeded 50 miles per hour:

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 $setWindowFields obtiene la velocidad media en millas por hora de cada camión:

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

    • sortBy: { timeStamp: 1 } ordena los documentos de cada partición por timeStamp en orden ascendente (1), por lo que la lectura del odómetro más temprana aparece primero.

    • output sets the miles derivative value in a new field called truckAverageSpeed using $derivative that is run in a range window.

      • The input expression is set to "$miles", which is used in the numerator for the derivative calculation.

      • The $derivative unit is set to "hour" for the timeStamp field, which is used in the denominator for the derivative calculation.

      • The window contains the range between a lower limit of -30 seconds (the previous 30 seconds from the current document in the output) and 0 seconds (matches the current document's timeStamp value in the output). This means $derivative returns the average speed for each truck in miles per hour in the 30 second window.

  • La etapa de $match utiliza el operador de mayor que $gt para 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 }
Califique esta página