2015-04-21 71 views
2

我使用Mongoid構建了一個Rails應用程序,我需要在我的一個模型中使用標籤。Mongoid標籤 - 從模型中收集獨特的數組項目

class Question 
    include Mongoid::Document 
    include Mongoid::Timestamps 

    has_many :options 
    belongs_to :user 

    field :title, type: String 
    field :options_count, type: Fixnum, default: 0 
    field :tags, type: Array 
end 

它工作得很好,我可以用any_in

Question.any_in(tags:'foo') 

得到所有問題的標籤,但我怎麼能得到的所有標籤的所有文檔問題

我正在嘗試使用map/reduce,但它看起來像我只是清掃所有文檔並在Ruby中對待數組,並且它感覺不對。

map = %Q{ 
    function() { 
    emit(this.title, {tags: this.tags}); 
    } 
} 

reduce = %Q{ 
    function(key, values) { 
    var result = []; 
    values.forEach(function(value) { 
     result.push(value.tags); 
    }); 
    return result.toString(); 
    } 
} 

map_reduce(map, reduce).out(inline: true).each do |doc| 
    p doc['value'] 
end 

回答

1

您可以使用db.collection.distinct這一點。在你的情況下,使用Mongoid:

Question.distinct(:tags) 

這將返回所有文件中沒有重複值的所有標籤數組。

+0

Yap!有用!對不起,這樣的noob問題。 – goo

+0

如何計算所有標籤的出現? – goo

+1

爲此,您將需要使用聚合框架,請參閱http://stackoverflow.com/questions/14617379/mongoose-mongodb-count-elements-in-array – victorkohl