我正在使用mongoid gem来存储事件和用户。
我的目标是找到最活跃的用户(事件数量最多)。
是否有更正确的方法在最后一小时找到活跃用户然后给出解决方案?
User has_many Events
hash = Hash.new{ |h,k| h[k] = 0 }
Event.where(:created_at.gte => 1.hour.ago).each_with_object(hash) do |event, memo|
memo[event.user_id] += 1
end.sort_by { |user_id,score| score }
由于
答案 0 :(得分:2)
您应该让数据库通过使用聚合框架来为您完成工作。
管道将是这样的:
db.events.aggregate({$match:{created_at:{$gt:<an-hour-ago>}}},
{$group:{_id:"$user_id", score:{$sum:1}}},
{$sort:{score:-1}}, {$limit:1} );