2011-09-17 21 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: