Docs Menu
Docs Home
/ /

$integral (operador de expresión)

Nuevo en la versión 5.0.

$integral

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 $setWindowFields en la etapa para los intervalos de integración.

  • Valores de resultado de expresión del $integral campo 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 string que especifica la unidad de tiempo. Utilice una de estas cadenas:

  • "week"

  • "day"

  • "hour"

  • "minute"

  • "second"

  • "millisecond"

Si el campo sortBy no es una fecha, debe unit omitir. Si unit especifica, debe especificar una fecha en el campo sortBy.

Si omite una ventana, se utiliza una ventana predeterminada con límites superior e inferior ilimitados.

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

  • sortBy: { timeStamp: 1 } ordena los documentos de cada partición por timeStamp en orden ascendente (1), de modo que el timeStamp más antiguo sea el primero.

  • output establece el kilowatts valor integral en un nuevo campo llamado powerMeterKilowattHours usando que se $integral 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 $integral unidad está configurada en "hour" para el campo timeStamp, lo que significa que $integral devuelve el consumo de energía en kilovatios-hora.

    • La ventana contiene documentos entre un unbounded límite inferior de y el current documento en la salida. Esto significa que devuelve el consumo total de energía en kilovatios-hora $integral de 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.

Volver

$indexOfCP

En esta página