2012-06-11 77 views
0

比方說總和超過一個領域mongoid

class User 
    include Mongoid::Document 

    field :sign_in_count,  :type => Integer, :default => 0 
    field :some_other_count, :type => Integer, :default => 0 

end 

我需要得到一個哈希值將由這兩個領域 的總和,這樣的結果會是這樣的:

{ "sign_in_count" => 4, "some_other_count" => 12 } 

如果我做

sign_in_sum = User.sum("sign_in_count") 
some_other_sum = User.sum("some_other_count") 

我看到兩個mongo查詢,但我需要在一個這樣做。 請幫忙。

+0

的MapReduce可以與幫助。 –

+0

你是說在Ruby代碼中嵌入JS代碼? –

+0

就是這樣的,是的。 –

回答

2
map = %Q{ 
    function() { 
    emit(this.UserIdentifier, { 
       num1: this.num1, 
       num2: this.num2 }); 
    } 
    } 

reduce = %Q{ 
    function(key, values) { 
    var result = { num1: 0, num2: 0}; 
    values.forEach(function(value) { 
     result.num1 += value.num1; 
     result.num2 += value.num2; 
    }); 
    return result; 
    } 
} 

criteria = Data.where(:UserIdentifier => @user.id).map_reduce(map, reduce).out(replace: "mr-results")