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 trapecio utilizando el:
sortBy valores de campo en la
$setWindowFieldsetapa para los intervalos de integración.Valores de resultado de la 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 a evaluar. Debe proporcionar una expresión que devuelva un número. | |
Comportamiento
Si omites una ventana, se usa una ventana por defecto con límites superiores e inferiores 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 mostrar el consumo de energía en kilovatios-hora medido 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 entero en un nuevo campo llamadopowerMeterKilowattHoursusando que se$integralejecuta en una ventana de rango.La expresión de entrada se establece
"$kilowatts"en, que se utiliza para los valores del eje y en el cálculo integral.La ventana contiene documentos entre un
unboundedlímite inferior y elcurrentdocumento en la salida. Esto significa que devuelve el consumo total de energía en$integralkilovatios-hora para los documentos desde el inicio de la partición, que es el primer punto de datos en la partición para cada medidor de energía, 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 ver otro ejemplo sobre el consumo energético IOT, consulta el libro electrónico Agregaciones prácticas de MongoDB.