本文主要是介绍MongoDB聚合运算符:$integral,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 语法
- 使用
- 举例
$integral
聚合运算符只能用在$setWindowField
阶段,返回曲线下面积的近似值,该曲线是使用梯形规则计算的,其中每组相邻文档使用以下公式形成一个梯形:
$setWindowFields
阶段中用于积分间隔的sortBy
字段值$integral
中input
字段表达式用于Y轴的值
语法
{$integral: {input: <expression>,unit: <time unit>}
}
$integral
的参数说明
input
,数值类型的表达式unit
,指定时间单位的字符串,可以是:"week"
、"day"
、"hour"
、"minute"
、"second"
、"millisecond"
。如果sortBy
字段不是日期类型,必须省略单位,如果指定了单位,就必须确保sortBy
字段为日期类型
使用
如果省略窗口,则使用具有无界上限和下限的默认窗口。
举例
使用下面的脚本创建powerConsumption
集合,包含仪表设备每隔 30 秒测量一次的用电量(以千瓦为单位):
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 }
] )
下面的例子在$setWindowFields
阶段使用$integral
输出每个仪表装置测量的能耗(千瓦时):
db.powerConsumption.aggregate( [{$setWindowFields: {partitionBy: "$powerMeterID",sortBy: { timeStamp: 1 },output: {powerMeterKilowattHours: {$integral: {input: "$kilowatts",unit: "hour"},window: {range: [ "unbounded", "current" ],unit: "hour"}}}}}
] )
在本例中:
partitionBy: "$powerMeterID"
对集合中的文档按照powerMeterID
分区。sortBy: { timeStamp: 1 }
对分区内的文档按照timeStamp
从小到大进行排序,最早的timeStamp
排在最前面。output
使用$integral
将一个区域窗口的kilowatts
积分值放到新字段powerMeterKilowattHours
:input
表达式为$kilowatts
,用于积分计算的Y轴值$integral unit
将timeStamp
的积分单位设置为hour
小时,$integral
返回千瓦时的能源消耗- 窗口在输出中包含了无下限到当前文档。这意味着
$integral
返回从分区开头(每个电表的分区中的第一个数据点)到输出中当前文档的时间戳的文档的总千瓦时能耗。
在本例输出中,电表1和2测量的能耗显示在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 }
这篇关于MongoDB聚合运算符:$integral的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!