Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 日期范围和递增数字的mongodb图表_Ruby_Mongodb_Charts_Mongoid_Aggregation Framework - Fatal编程技术网

Ruby 日期范围和递增数字的mongodb图表

Ruby 日期范围和递增数字的mongodb图表,ruby,mongodb,charts,mongoid,aggregation-framework,Ruby,Mongodb,Charts,Mongoid,Aggregation Framework,我想在mongodb中节省电表的瓦时。 每分钟当前值都存储在数据库中。 (1440分钟=1天) 数据库如下所示: 我现在需要的是每小时增加的值 我的第一个想法是 hour0 = Measurement.where(meter_id: @meter.id, timestamp: DateTime.now.utc.beginning_of_day).first.wh hour1 = Measurement.where(meter_id: @meter.id, timestamp: DateTime

我想在mongodb中节省电表的瓦时。 每分钟当前值都存储在数据库中。 (1440分钟=1天)

数据库如下所示:

我现在需要的是每小时增加的值

我的第一个想法是

hour0 = Measurement.where(meter_id: @meter.id, timestamp: DateTime.now.utc.beginning_of_day).first.wh

hour1 = Measurement.where(meter_id: @meter.id, timestamp: DateTime.now.utc.beginning_of_day + 1.hour).first.wh

puts hour0 => 1234136 
puts hour1 => 1234838 
小时1-小时0=702瓦特在夜间0点到1点之间消耗

这是可行的,但对我来说似乎不是正确的方式。 如果我想改进决议,该怎么办。不是每小时而是每15分钟

最好能指定日期范围和分辨率(分钟、小时、天)。 mongodb还给我一个带值的数组


我还相信mongodb聚合框架非常适合

澄清问题,日期是基于日期的,因此我们的处理方式不同。如果您有一个时间戳值,则进行如下日期计算,以选择每小时的最后一个值:

db.collection.aggregate([
{“$match”:{“timestamp”:{“$gte”:dayStart,$lt”:dayEnd}},
{“$project”:{
“wh”:1,
“小时”:{“$hour”:“$timestamp”}
}},
{“$sort”:{“hourly”:1}},
{“$组”:{
“_id”:“$hourly”,
“wh”:{“$last”:“$wh”}
}}
])
要在一小时内返回总消耗量,请进行一些计算:

db.collection.aggregate([
{“$match”:{“timestamp”:{“$gte”:dayStart,$lt”:dayEnd}},
{“$project”:{
“wh”:1,
“小时”:{“$hour”:“$timestamp”}
}},
{“$组”:{
“_id”:“$hourly”,
“一读”:{“$last”:“$wh”},
“lastReading”:{“$first”:“$wh”}
}},
{“$project”:{
“hourReading”:{“$subtract”:[“$lastReading”,“$firstReading”]}
}},
{“$sort”:{“\u id”:1},
])

很抱歉,我没有收到任何输出聚合({“$match”:{“timestamp”:{“$gte”:ISODate('2014-03-11 00:00:00'),“$lt”:ISODate('2014-03-11 23:59:59')}},{“$project”:{“wh”:1,“hourly”:{“$subtract”:[“$timestamp”,{“$mod”:[“$timestamp”,3600]}}}})`@user310200这取决于
时间戳
字段的实际格式。您的一些方法指出这是一个“历元”时间戳。但如果这实际上是一个BSON日期,那么你有一个不同的方法。请澄清。@user310200因为您有实际日期,所以编辑应该合适。我现在得到一些数据。但不是vor hour1的值是1235432,而是需要702瓦特。我需要在一小时内增加新的功耗(702)。不是整个计数器读数(1235432)。