Definición
Nuevo en la versión 5.0.
Devuelve la aproximación del área bajo una curva, que se calcula utilizando la regla trapezoidal donde cada conjunto de documentos adyacentes forma un trapezoide utilizando:
Valores del camposortBy
$setWindowFieldsen la etapa para los intervalos de integración.Valores de resultado de expresión del
$integralcampo de entrada en para los valores del eje y.
$integral solo está disponible en la $setWindowFields etapa.
$integral sintaxis:
{ $integral: { input: <expression>, unit: <time unit> } }
$integral toma un documento con estos campos:
Campo | Descripción |
|---|---|
Especifica la expresión que se evaluará. Debe proporcionar una expresión que devuelva un número. | |
Un
Si el campo sortBy no es una fecha, debe |
Comportamiento
Si omite una ventana, se utiliza una ventana predeterminada con límites superior e inferior ilimitados.
Ejemplo
Crea una colección powerConsumption que contenga el consumo de energía eléctrica en kilovatios medido por dispositivos de medidores a 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 ejemplo utiliza $integral en la etapa para generar el consumo de energía en kilovatios-hora medidos por cada dispositivo $setWindowFields medidor:
db.powerConsumption.aggregate( [ { $setWindowFields: { partitionBy: "$powerMeterID", sortBy: { timeStamp: 1 }, output: { powerMeterKilowattHours: { $integral: { input: "$kilowatts", unit: "hour" }, window: { range: [ "unbounded", "current" ], unit: "hour" } } } } } ] )
En el ejemplo:
partitionBy: "$powerMeterID"particiona los documentos de la colección enpowerMeterID.sortBy: { timeStamp: 1 }ordena los documentos de cada partición portimeStampen orden ascendente (1), de modo que eltimeStampmás antiguo sea el primero.outputestablece elkilowattsvalor integral en un nuevo campo llamadopowerMeterKilowattHoursusando que se$integralejecuta en una ventana de rango.La expresión input se establece en
"$kilowatts", que se utiliza para los valores del eje y en el cálculo integral.La
$integralunidad está configurada en"hour"para el campotimeStamp, lo que significa que$integraldevuelve el consumo de energía en kilovatios-hora.La ventana contiene documentos entre un
unboundedlímite inferior de y elcurrentdocumento en la salida. Esto significa que devuelve el consumo total de energía en kilovatios-hora$integralde los documentos desde el inicio de la partición (el primer punto de datos de la partición para cada medidor de potencia) hasta la marca de tiempo del documento actual en la salida.
En este ejemplo de salida, el consumo de energía medido por los medidores 1 y 2 se muestra en el 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 }
Tip
Para un ejemplo adicional sobre Consumo de energía de IoT,consulte Agregaciones prácticas de MongoDB libro electrónico.