Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何计算搜索词的_id数?_Ruby_Mongodb_Mongoid - Fatal编程技术网

Ruby 如何计算搜索词的_id数?

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"]}

如何使查询返回计数搜索名称的post_ID数?我希望在生成的数组中有name和count

实际代码:

@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或其他工具自己维护它会更容易。

好主意,但我还不知道如何操作。