Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
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 trapecio utilizando el:

  • sortBy valores de campo en la $setWindowFields etapa para los intervalos de integración.

  • Campo entrada valores de resultado de expresión en $integral 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.

Un string que especifica la unidad de tiempo. Usa una de estas cadenas:

  • "week"

  • "day"

  • "hour"

  • "minute"

  • "second"

  • "millisecond"

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

Si omites una ventana, se usa una ventana por defecto con límites superiores e inferiores 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 $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 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 valor integral kilowatts en un nuevo campo llamado powerMeterKilowattHours utilizando $integral que 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 $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 y el current documento en el resultado. Esto significa que $integral devuelve 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.

Volver

$indexOfCP

En esta página