$derivative (agregação)
Nesta página
Definição
Novidades na versão 5.0.
Retorna a taxa média de alteração dentro dajanela especificada, que é calculada usando:
Primeiro e último documentos na
$setWindowFields
janela de estágio .Numerador, que é definido como o resultado da subtração do valor da expressão numérica do primeiro documento do valor da expressão do último documento.
Denonado, que é definido como o resultado da subtração do valor do campo sortBy do primeiro documento do valor do campo sortBy do último documento.
$derivative
está disponível somente no estágio $setWindowFields
. Você deve especificar uma janela no estágio $setWindowFields
ao usar $derivative
.
$derivative
sintaxe:
{ $derivative: { input: <expression>, unit: <time unit> } }
$derivative
pega um documento com estes campos:
Campo | Descrição |
---|---|
Especifica a expressão para avaliar. A expressão deve avaliar para um número. | |
Comportamento
Você deve especificar uma janela no estágio $setWindowFields
ao usar $derivative
.
Exemplo
Crie uma coleção deliveryFleet
que contenha leituras de odômetro para caminhão de entrega registrados em 30 segundos de intervalo:
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 exemplo usa $derivative
no estágio $setWindowFields
para obter a velocidade média em milhas por hora para cada caminhão, e o estágio $match
para filtrar os resultados para caminhonetes cuja velocidade excedeu 50 milhas 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 } } } ] )
No exemplo:
O estágio
$setWindowFields
obtém a velocidade média em milhas por hora para cada caminhão:partitionBy: "$truckID"
particiona os documentos na coleção portruckID
.sortBy: { timeStamp: 1 }
classifica os documentos em cada partição portimeStamp
em ordem crescente (1
), de modo que a leitura mais antiga do odômetro seja a primeira.output
define o valor derivadomiles
em um novo campo chamadotruckAverageSpeed
usando$derivative
que é executado em uma janela de faixa .A expressão de entrada é definida como
"$miles"
, que é usada no numerador para o cálculo da derivada.A
$derivative
unidade é definida"hour"
como para otimeStamp
campo , que é usado no denominador para o cálculo da derivada.A janela contém o intervalo entre um limite inferior de
-30
segundos (os 30 segundos anteriores do documento atual na saída) e0
segundos (corresponde ao valortimeStamp
do documento atual na saída). Isso significa que$derivative
retorna a velocidade média de cada caminhão em milhas por hora na segunda janela 30 .
O estágio
$match
usa o operador maior que$gt
para filtrar os resultados para caminhonetes cuja velocidade exceda 50 milhas por hora.
No exemplo de saída a seguir, a velocidade do caminhão 1 é mostrada no campo truckAverageSpeed
. A velocidade do caminhão 2 não é exibida porque o caminhão 2 não excedeu 50 milhas 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 }