使用MongoID的不区分大小写的查询条件

BBJ*_*BJ3 1 ruby ruby-on-rails mongodb nosql mongoid

我有一个查询条件,它查找要匹配的元素数组(tags_array):

User.all_in('watchlists.tags_array' => tags_array)
Run Code Online (Sandbox Code Playgroud)

我想的标准是不区分大小写的,这意味着我希望它匹配%w[Ruby Web Framework]以及%w[RUBY WEB FRAMEWORK]%w[ruby web framework]等等...

这可能是通过mongoid还是我必须使用外部过滤技巧?

BBJ*_*BJ3 5

感谢Jordan的支持,仅仅是为了跟踪目的(对我自己和其他人而言),我将发布整个解决方案.

是的,Yuriy Goldshtrakh是对的,MongoDB仍然不支持不区分大小写的查询,但是MongoID有正则表达式,我唯一的疑问就是性能下降已经说过" mu太短 "但是我直到现在才检查...反正这里是 :

 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
Run Code Online (Sandbox Code Playgroud)

保存/创建mongoid级别没有规范化,标签保存为大写或小写.

标准化(标签的不区分大小写的匹配)完全在嵌套的查询标准期间实现(由于嵌入的一对多模型,它是嵌套的).

如果您有更好的想法或代码,请发帖.

我还要感谢Luiz K.回答,即使我不遵循这样的方式:数据级别的规范化在我看来过于严格,失去了语义和弹性"用户"方面(实际上是标记者).无论如何,对于其他要求来说可能是一个很好的解

非常感谢Luca G. Soave