对于不区分大小写的搜索,有没有办法在mongoid中设置属性?
让我们说有人有一个用户名:IAmGreat我希望使用他们唯一的用户名来查找用户数据,而无需对其进行屠宰并将其更改为iamgreat。
由于
答案 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)