Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / /

$integral (agregação)

Nesta página

  • Definição
  • Comportamento
  • Exemplo

Novidades na versão 5.0.

$integral

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.

Uma string que especifica a unidade de tempo. Use uma destas strings:

  • "week"

  • "day"

  • "hour"

  • "minute"

  • "second"

  • "millisecond"

Se o campo sortBy não for uma data, será necessário omitir uma unit. Se você especificar uma unit, deverá especificar uma data no campo sortBy .

Se você omitir um window, será usada uma janela padrão com limites superior e inferior ilimitados.

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 por powerMeterID.

  • sortBy: { timeStamp: 1 } classifica os documentos em cada partição por timeStamp em ordem crescente (1), para que o timeStamp mais antigo seja o primeiro.

  • output define o valor integral kilowatts em um novo campo chamado powerMeterKilowattHours 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 campo timeStamp, 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 documento current 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.

Voltar

$indexOfCP