Как посчитать много _ids для поискового запроса? - PullRequest
0 голосов
/ 06 ноября 2011

Как сделать, чтобы запрос возвращал количество номеров 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 Ответ

1 голос
/ 06 ноября 2011

Я не думаю, что это можно сделать на лету без какой-либо сложной операции уменьшения карты. Скорее всего, было бы проще добавить поле count в ваш документ Tag и поддерживать его самостоятельно с помощью $ inc или чего-то еще.

...