不区分大小写的搜索mongoid中的单词

时间:2011-09-17 16:11:14

标签: ruby-on-rails indexing mongoid case-insensitive

对于不区分大小写的搜索,有没有办法在mongoid中设置属性?

让我们说有人有一个用户名:IAmGreat我希望使用他们唯一的用户名来查找用户数据,而无需对其进行屠宰并将其更改为iamgreat。

由于

5 个答案:

答案 0 :(得分:49)

实际上,您可以搜索不区分大小写的内容。但你必须用正则表达式搜索! 以下是我在http://www.VersionEye.com

中使用它的示例
User.first(conditions: {email: /^#{email}$/i})

使用“/”开始和结束正则表达式。正则表达式后的“i”表示不区分大小写。 “^”表示元素必须以搜索字符串开头,“$”表示元素必须以搜索字符串结尾。如果您正在寻找完全匹配,这很重要。

答案 1 :(得分:6)

您甚至可以尝试以下内容:

User.where(username: /#{username}/i).first

答案 2 :(得分:4)

如果您使用rails或mongoid,可以尝试使用ff:

@user = User.where({:username => /.*#{name}.*/i })

答案 3 :(得分:1)

为什么不进行比较时只需User.login.downcase(或任何模型/属性组合)?这将使DB中的大小写保持原样,但仅仅为了比较而将该字段缩小。

答案 4 :(得分:0)

如果您的应用程序不需要将用户输入存储为区分大小写,则只需在输入时将输入转换为大写或小写。例如,

username = params[:username].to_s.downcase

否则,如果性能是一个问题(不区分大小写的正则表达式无法利用索引),那么正确的方法是存储用户名的备份字段

field :username_downcase

然后执行查询:

User.where(username_downcase: params[:username].to_s.downcase)