2012-04-24 28 views
-1

你能帮助这个查询吗?从SQL更改为mongoid

SELECT nb_user, count(nb_user) as nb_account FROM (
SELECT COUNT(USER.user_id) AS nb_user 
FROM USER 
GROUP BY USER.account_id 
) as toto 
GROUP BY nb_user 

我想在我的Rails 3.2应用程序中将它与mongoid一起使用。

+1

你尝试过这么远吗?这个网站是不是“给我的代码”,你应该尝试自己完成这个。 – 2012-04-24 23:49:10

+0

我试图关注http://kylebanker.com/blog/2009/11/mongodb-advanced-grouping/,但没有结果。我无法通过account_id来计算user_id – user1143818 2012-04-25 00:08:02

+0

对此使用map/reduce – MikDiet 2012-04-25 04:46:15

回答

0

我有一个很好的结果,但我不知道这是最好的解决方案。

在我的控制器:

map = {"sum" => 0} 
reduce = "function(doc, prev) { 
if(prev[doc.user_user_id] == null){ 
prev[doc.user_user_id] = 1; 
prev.sum += 1; 
} 
}" 

data = MyLog.collection.group(:key =>'user_account_id', :initial => map, :reduce => reduce) 

data_result = {} 

data.each do |data| 
if data_result[data['sum']].nil? 
data_result[data['sum']] = 1 
else 
data_result[data['sum']] +=1 
end 
end