1

Receipe モデルがあり、すべてのレシピをフィードに表示します。「Mac & Cheese」のそのフィードには 5 つのインスタンスが存在する可能性があります。それらをすべてグループ化し、フィードの「Mac & Cheese」の横にカウントを表示したいと考えています。私が得るその部分。誰がいつ作成したかなど、レシピに関連して表示したいドキュメントの情報がさらにあります。Map / Reduce を実行すると、レシピ名とカウントが返されます。グループ内の最後のドキュメントにアクセスして、user_id と created_at およびその他のドキュメント属性を表示するにはどうすればよいですか?

class Recipe
  include Mongoid::Document
  include Mongoid::Timestamps
  include MongoidVote::Voteable
  include Tire::Model::Search
  include Tire::Model::Callbacks

  field :name
  field :slug

  belongs_to :user, :inverse_of => :recipes

  def self.grouped
    map = %Q{
      function () {
        emit(this.name, {count: 1});
      }
    }
    reduce = %Q{
      function(key, values) {
        var result = {count: 0};
        values.forEach(function(value) {
          result.count += value.count;
        });
        return result;
      }
    }
    self.all.
      map_reduce(map, reduce).out(inline: true)
  end
end

コンソールから、すべてが期待どおりに機能します。

recipes = Recipe.grouped
recipes.each do |r|
  puts r
end

{"_id"=>"Mac & Cheese", "value"=>{"count"=>3.0}}
{"_id"=>"Spaghetti and Meatballs", "value"=>{"count"=>1.0}}
{"_id"=>"Egg Sandwich", "value"=>{"count"=>2.0}}

ユーザー名、レシピ名、レシピ数を表示するには、各レシピの完全なドキュメントと関係にアクセスするにはどうすればよいですか? Recipe.grouped からの結果をループして、その名前に基づいて完全なレシピ ドキュメントを再クエリする必要がありますか、それとも別の方法がありますか?

ありがとう!

4

1 に答える 1