Mongoid 标签 - 从模型中收集独特的数组项
Mongoid Tags - Gather unique array items from model
我正在使用 Mongoid 构建一个 Rails 应用程序,我的一个模型中需要标签。
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
您可以为此使用 db.collection.distinct
。在您的情况下,使用 Mongoid:
Question.distinct(:tags)
这将 return 所有文档中所有标签的数组,没有重复值。
我正在使用 Mongoid 构建一个 Rails 应用程序,我的一个模型中需要标签。
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
您可以为此使用 db.collection.distinct
。在您的情况下,使用 Mongoid:
Question.distinct(:tags)
这将 return 所有文档中所有标签的数组,没有重复值。