我试图检查记录的2.5秒间隔,并根据计数将对象添加到数组中。这种方式有效但速度太慢。感谢
@tweets = Tweet.last(3000)
first_time = @tweets.first.created_at
last_time = @tweets.last.created_at
while first_time < last_time
group = @tweets.where(created_at: (first_time)..(first_time + 2.5.seconds)).count
if group == 0 || nil
puts "0 or nil"
first_id + 1
array << {tweets: 0}
else
first_id += group
array << {tweets: group}
end
first_time += 2.5.seconds
end
return array.to_json
end
答案 0 :(得分:1)
您真正需要的是您检索到的记录上的group_by
方法:
grouped = @tweets.group_by do |tweet|
# Convert from timestamp to 2.5s interval number
(tweet.created_at.to_f / 2.5).to_i
end
返回散列,其中键是时间间隔,值是推文数组。
您在示例中所做的事情可能会产生数以千计的查询。始终注意log/development.log
以查看后台发生的情况。