ruby-on-rails - 使用 MongoID 的不区分大小写的查询条件

标签 ruby-on-rails ruby mongodb mongoid nosql

我有一个查询条件,用于查找要匹配的元素数组 (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/

相关文章:

ruby-on-rails - Rails 3 : nested_form, collection_select,accepts_nested_attributes_for 和 fields_for

ruby-on-rails - rails : Remove element from array of hashes

mongodb - meteor react 骨料

ruby-on-rails - Rails 按键对哈希数组进行分组

ruby-on-rails - 如何在 Rails 3 中创建动态根?

java - 在 Ruby 中调用 Java 程序并获取输出

python - 使用带有 mongo-hadoop 和 python 的 hadoop 流式处理的空输出集合

mongodb - AWS 是否提供任何托管的 mongoDB 服务?

ruby-on-rails - 如何解释这个 Rails 错误?

ruby-on-rails - Rails - Puma 随机启动 worker 失败