查找活动用户

时间:2013-11-24 22:47:25

标签: ruby mongodb mongoid

我正在使用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 }

由于

1 个答案:

答案 0 :(得分:2)

您应该让数据库通过使用聚合框架来为您完成工作。

管道将是这样的:

db.events.aggregate({$match:{created_at:{$gt:<an-hour-ago>}}},
                    {$group:{_id:"$user_id", score:{$sum:1}}},
                    {$sort:{score:-1}}, {$limit:1} );