Ruby 如何计算搜索词的_id数?
如何使查询返回计数搜索名称的post_ID数?我希望在生成的数组中有name和count 实际代码:Ruby 如何计算搜索词的_id数?,ruby,mongodb,mongoid,Ruby,Mongodb,Mongoid,如何使查询返回计数搜索名称的post_ID数?我希望在生成的数组中有name和count 实际代码: @array_tags = Tag.where(:name.in=>[/r/]) # returns # [{"_id":"4eb57a20b51ab102cc00001f","name":"ruby","post_ids":["4eb57a20b51ab102cc00001e","4eb57a53b51ab102cc000023","4eb57a63b51ab102cc000025"]}
@array_tags = Tag.where(:name.in=>[/r/])
# returns
# [{"_id":"4eb57a20b51ab102cc00001f","name":"ruby","post_ids":["4eb57a20b51ab102cc00001e","4eb57a53b51ab102cc000023","4eb57a63b51ab102cc000025"]}]
# best expected
# [{"_id":"4eb57a20b51ab102cc00001f","name":"ruby","count":"3"}]
模式:
{ "_id" : ObjectId( "4eb57a20b51ab102cc00001f" ),
"name" : "ruby",
"post_ids" : [
ObjectId( "4eb57a20b51ab102cc00001e" ),
ObjectId( "4eb57a53b51ab102cc000023" ),
ObjectId( "4eb57a63b51ab102cc000025" ) ] }
编辑强>
我明白了!资料来源:
@tags = Tag.grpost(params[:term])
def self.grpost(find_by)
self.collection.group(
:key => 'name',
:cond => {:name=>{"$in"=>[/^#{find_by}/]}},
:reduce => "function(obj,prev) { prev.total_posts += obj.post_ids.length; }",
:initial => { total_posts: 0 }
)
end
我认为如果没有复杂的map-reduce操作,就不可能在运行中做到这一点。
很可能将计数字段添加到标记文档中,并使用$inc或其他工具自己维护它会更容易。好主意,但我还不知道如何操作。