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 からの結果をループして、その名前に基づいて完全なレシピ ドキュメントを再クエリする必要がありますか、それとも別の方法がありますか?
ありがとう!