0

まあ言ってみれば

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")

2 つの mongo クエリが表示されますが、これを 1 つで行う必要があります。助けてください。

4

2 に答える 2

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")
于 2012-06-17T07:34:37.937 に答える
1

これを、Ruby に JavaScript を埋め込むことではなく、アプリケーション コードにクエリを埋め込むことと考えないでください。これは、他の多くの言語/フレームワークではかなり標準的な方法です。これは役立つかもしれない投稿です:

http://kylebanker.com/blog/2009/12/mongodb-map-reduce-basics/

于 2012-06-11T18:27:12.197 に答える