如何计算搜索词的多个_ids?

时间:2011-11-05 21:16:06

标签: ruby mongodb mongoid

如何使查询返回搜索名称的post_ids计数?我希望在结果数组中有名称和计数。

实际代码:

@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

1 个答案:

答案 0 :(得分:1)

我认为没有一些复杂的map-reduce操作可以即时执行此操作。 最有可能的是,将计数字段添加到Tag文档并使用$ inc或其他东西自行维护它会更容易。