有没有办法在mongoid中为不区分大小写的搜索设置一个属性?假设某人有一个用户名:IAmGreat和我想找到用户数据使用他们唯一的用户名,而不是屠宰它,并将其更改为iamgreat。谢啦,谢啦
nc1teljy1#
实际上你可以搜索大小写不敏感。但是你必须用正则表达式搜索!下面是我在http://www.VersionEye.com中使用它的一个例子
User.first(conditions: {email: /^#{email}$/i})
使用“/”可以开始和结束正则表达式。正则表达式后面的“i”表示不区分大小写。“^”表示元素必须以搜索字符串开头,“$”表示元素必须以搜索字符串结尾。如果要查找精确匹配,这一点很重要。2022年12月编辑:这将在没有以下条件的情况下工作:
User.first(email: /#{email}/i)
rsl1atfo2#
你甚至可以尝试这样的东西:
User.where(username: /#{username}/i).first
lx0bsm1f3#
如果你正在使用rails或者mongoid,你可以试试ff:第一个月
jobtbby34#
为什么在进行比较时不直接将User.login.downcase(或者任何模型/属性组合)小写呢?这将使DB中的大写保持原样,但仅为了比较而将字段小写。
User.login.downcase
3hvapo4f5#
如果您的应用程序不需要将用户输入存储为区分大小写,只需在输入时将输入转换为大写或小写即可。
username = params[:username].to_s.downcase
否则,如果性能对您来说是个问题(不区分大小写的正则表达式不能利用索引),正确的方法是为username存储一个备份字段
field :username_downcase
然后执行查询:
User.where(username_downcase: params[:username].to_s.downcase)
5条答案
按热度按时间nc1teljy1#
实际上你可以搜索大小写不敏感。但是你必须用正则表达式搜索!下面是我在http://www.VersionEye.com中使用它的一个例子
使用“/”可以开始和结束正则表达式。正则表达式后面的“i”表示不区分大小写。“^”表示元素必须以搜索字符串开头,“$”表示元素必须以搜索字符串结尾。如果要查找精确匹配,这一点很重要。
2022年12月编辑:
这将在没有以下条件的情况下工作:
rsl1atfo2#
你甚至可以尝试这样的东西:
lx0bsm1f3#
如果你正在使用rails或者mongoid,你可以试试ff:
第一个月
jobtbby34#
为什么在进行比较时不直接将
User.login.downcase
(或者任何模型/属性组合)小写呢?这将使DB中的大写保持原样,但仅为了比较而将字段小写。3hvapo4f5#
如果您的应用程序不需要将用户输入存储为区分大小写,只需在输入时将输入转换为大写或小写即可。
否则,如果性能对您来说是个问题(不区分大小写的正则表达式不能利用索引),正确的方法是为username存储一个备份字段
然后执行查询: