2011-09-17 18 views
10

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

可以说有人有一个用户名:IAmGreat,我想用他们唯一的用户名查找用户数据,而不用将其更改为iamgreat。

感谢

回答

1

为什么不下来User.login.downcase(或任何模型/属性组合)在进行比较时?这将使数据库中的大写字母保持原样,但是只是为了比较而忽略了该字段。

46

其实你可以搜索不区分大小写。但你必须用正则表达式搜索! 下面是一个例子,我如何使用它在http://www.VersionEye.com

User.first(conditions: {email: /^#{email}$/i}) 

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

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

FYI:你可能需要的,如果它来净化你的正则表达式包括用户输入:'/ ^#{Regexp.escape(email)} $/i' – Andrew

+1

user = where(email:/^#{email}$/i).first – shilovk

5

你甚至可以尝试像

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

+0

(1)不敏感的平等(2)(AFAIK)不会使用索引来检查集合,因此它可能非常昂贵。 –

+0

是的。这比默认查询慢50%。但它确实检查不区分大小写的相等性。 – mrudult

+1

不,它不检查平等。你的正则表达式没有锚。 –

2

mongoid你可以试试FF: