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.Campo entrada valores de resultado de expresión en
$integralpara 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 $setWindowFields para obtener el consumo de energía en kilovatios hora medido por cada dispositivo de medición:
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 el valor integralkilowattsen un nuevo campo llamadopowerMeterKilowattHoursutilizando$integralque se ejecuta 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 y elcurrentdocumento en el resultado. Esto significa que$integraldevuelve el consumo total de energía en kilovatios-hora de los documentos desde el inicio de la partición, que es el primer punto de datos de 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 obtener un ejemplo adicional sobre IOT Consumo de energía, consulta el agregaciones de MongoDBPráctico libro electrónico.