我有一个查询条件,用于查找要匹配的元素数组 (tags_array):
User.all_in('watchlists.tags_array' => tags_array)
我希望条件不区分大小写,这意味着我希望它匹配 %w[Ruby Web Framework]
以及 %w[RUBY WEB FRAMEWORK]
或 %w[ruby web framework]
等等...
这可以通过 mongoid 实现还是我必须使用外部过滤器技巧?
最佳答案
感谢the support of Jordan并且仅出于跟踪目的(对于我自己和其他人),我将发布整个解决方案。
是的,Yuriy Goldshtrakh是对的,MongoDB 仍然不支持不区分大小写的查询,但 MongoID 有正则表达式,我唯一的疑问是关于性能下降,正如“mu is too short”已经说过的,但我直到现在才检查......无论如何它是:
Object.const_set :Competitor, Struct.new(:html_url, :description, :watchers, :forks)
def self.find_competitors(tags_array)
competitors = []
User.all_in('watchlists.tags_array' => tags_array.map{|tag|/^#{tag}/i}).only(:watchlists).each do |u|
u.watchlists.all_in(:tags_array => tags_array.map{|tag|/^#{tag}/i}).desc(:watchers).each do |wl|
competitors << Competitor.new(wl.html_url, wl.description, wl.watchers, wl.forks)
end
end
return competitors
end
在保存/创建 mongoid 级别没有规范化,标签以大写或小写形式保存。
规范化(不区分大小写的标签匹配)完全在嵌套查询条件中实现(它是嵌套的,因为 embedded one to many model)。
如果您有更好的想法或代码,请发帖。
我还要感谢 Luiz K.为了回答,即使我不会那样做:在我看来,数据级别的规范化过于严格,失去了语义和弹性“用户”方面(实际上正在标记)。无论如何可能是满足其他要求的一个很好的解决方案。
非常感谢 卢卡·索维
关于ruby-on-rails - 使用 MongoID 的不区分大小写的查询条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10523575/