$integral (agregação)
Nesta página
Definição
Novidades na versão 5.0.
Retorna a aproximação da área abaixo de uma curva, que é calculada usando a regra do cachecol, em que cada conjunto de documentos adjacentes forma um cachecol usando:
valores de campo sortBy no estágio
$setWindowFields
para os intervalos de integração.valores de resultado da expressão do campo de entrada em para os valores do eixo
$integral
y.
$integral
está disponível somente no estágio $setWindowFields
.
$integral
sintaxe:
{ $integral: { input: <expression>, unit: <time unit> } }
$integral
pega um documento com estes campos:
Campo | Descrição |
---|---|
Especifica a expressão para avaliar. Você deve fornecer uma expressão que retorne um número. | |
Comportamento
Se você omitir um window, será usada uma janela padrão com limites superior e inferior ilimitados.
Exemplo
Crie uma collection powerConsumption
que contenha o uso de energia elétrica em kilosegundos medido por dispositivos de medição em intervalos de 30 segundos:
db.powerConsumption.insertMany( [ { powerMeterID: "1", timeStamp: new Date( "2020-05-18T14:10:30Z" ), kilowatts: 2.95 }, { powerMeterID: "1", timeStamp: new Date( "2020-05-18T14:11:00Z" ), kilowatts: 2.7 }, { powerMeterID: "1", timeStamp: new Date( "2020-05-18T14:11:30Z" ), kilowatts: 2.6 }, { powerMeterID: "1", timeStamp: new Date( "2020-05-18T14:12:00Z" ), kilowatts: 2.98 }, { powerMeterID: "2", timeStamp: new Date( "2020-05-18T14:10:30Z" ), kilowatts: 2.5 }, { powerMeterID: "2", timeStamp: new Date( "2020-05-18T14:11:00Z" ), kilowatts: 2.25 }, { powerMeterID: "2", timeStamp: new Date( "2020-05-18T14:11:30Z" ), kilowatts: 2.75 }, { powerMeterID: "2", timeStamp: new Date( "2020-05-18T14:12:00Z" ), kilowatts: 2.82 } ] )
Este exemplo usa $integral
no estágio $setWindowFields
para gerar o consumo de energia em quilowatts-hora registrado por cada medidor:
db.powerConsumption.aggregate( [ { $setWindowFields: { partitionBy: "$powerMeterID", sortBy: { timeStamp: 1 }, output: { powerMeterKilowattHours: { $integral: { input: "$kilowatts", unit: "hour" }, window: { range: [ "unbounded", "current" ], unit: "hour" } } } } } ] )
No exemplo:
partitionBy: "$powerMeterID"
particiona os documentos na coleção porpowerMeterID
.sortBy: { timeStamp: 1 }
classifica os documentos em cada partição portimeStamp
em ordem crescente (1
), para que otimeStamp
mais antigo seja o primeiro.output
define o valor integralkilowatts
em um novo campo chamadopowerMeterKilowattHours
usando$integral
que é executado em uma janela de faixa .A expressão de entrada é definida como
"$kilowatts"
, a qual é usada para os valores do eixo y no cálculo da integral.A unidade
$integral
é definida como"hour"
para o campotimeStamp
, o que significa que$integral
retorna o consumo de energia em quilowatts-hora.A janela contém documentos entre um limite inferior
unbounded
e o documentocurrent
na saída. Isso significa que$integral
retorna o consumo total de energia em kilowatts-hora para os documentos desde o início da partição, a qual é o primeiro ponto de dados na partição para cada medidor de energia, até o carimbo de data/hora do documento atual na saída.
Neste exemplo de saída, o consumo de energia medido pelos metros 1 e 2 é mostrado no campo powerMeterKilowattHours
:
{ "_id" : ObjectId("60cbdc3f833dfeadc8e62863"), "powerMeterID" : "1", "timeStamp" : ISODate("2020-05-18T14:10:30Z"), "kilowatts" : 2.95, "powerMeterKilowattHours" : 0 } { "_id" : ObjectId("60cbdc3f833dfeadc8e62864"), "powerMeterID" : "1", "timeStamp" : ISODate("2020-05-18T14:11:00Z"), "kilowatts" : 2.7, "powerMeterKilowattHours" : 0.023541666666666666 } { "_id" : ObjectId("60cbdc3f833dfeadc8e62865"), "powerMeterID" : "1", "timeStamp" : ISODate("2020-05-18T14:11:30Z"), "kilowatts" : 2.6, "powerMeterKilowattHours" : 0.045625 } { "_id" : ObjectId("60cbdc3f833dfeadc8e62866"), "powerMeterID" : "1", "timeStamp" : ISODate("2020-05-18T14:12:00Z"), "kilowatts" : 2.98, "powerMeterKilowattHours" : 0.068875 } { "_id" : ObjectId("60cbdc3f833dfeadc8e62867"), "powerMeterID" : "2", "timeStamp" : ISODate("2020-05-18T14:10:30Z"), "kilowatts" : 2.5, "powerMeterKilowattHours" : 0 } { "_id" : ObjectId("60cbdc3f833dfeadc8e62868"), "powerMeterID" : "2", "timeStamp" : ISODate("2020-05-18T14:11:00Z"), "kilowatts" : 2.25, "powerMeterKilowattHours" : 0.019791666666666666 } { "_id" : ObjectId("60cbdc3f833dfeadc8e62869"), "powerMeterID" : "2", "timeStamp" : ISODate("2020-05-18T14:11:30Z"), "kilowatts" : 2.75, "powerMeterKilowattHours" : 0.040625 } { "_id" : ObjectId("60cbdc3f833dfeadc8e6286a"), "powerMeterID" : "2", "timeStamp" : ISODate("2020-05-18T14:12:00Z"), "kilowatts" : 2.82, "powerMeterKilowattHours" : 0.06383333333333334 }
Dica
Veja também:
Para obter um exemplo adicional sobre IoT consumo de energia , consulte as MongoDB Aggregations práticas do e-book.