我有一个 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 的结果并根据其名称重新查询完整的食谱文档,还是有其他方法可以走?
谢谢!