2012-03-30 31 views
13

的Mongoid文檔只給出了做一個通配符搜索的一個例子:如何在Ruby on Rails環境中使用Mongoid進行通配符搜索?

Person.where(first_name: /^d/i) 

這個發現與以「d」開頭的第一個名字所有的人。

/^/i分別代表什麼?

我如何找到所有名字在字符串中間有「na」的人?例如,這個查詢會找到「jonathan」,因爲「na」是整個字符串的一個子字符串。

是否有網站或指導這些信息?

回答

34

你需要這個來找到名字中帶有「na」的人。

Person.where(first_name: /na/i) 

至於你的例子:

Person.where(first_name: /^d/i) 

^的意思是 「行首」。這個正則表達式將匹配所有第一個字母爲「d」的字符串。 /i的意思是「不區分大小寫的匹配」。所以它會匹配「d」和「D」。

注意:只有前綴正則表達式(前面的^)能夠使用索引。

Is there website or guide with this information?

這是my favourite

+3

+1鏈接到Rubular.com – Joe 2012-06-26 21:26:00

+0

如果字段'first_name'的類型爲'Mongoid :: EncryptedString',是否可以像'Person.where(first_name:/ na/i)一樣進行查詢?我正在使用mongoid 3.1.6並獲取* TypeError:沒有將Regexp隱式轉換爲String *。 – 2017-01-24 08:29:37

4

這不是「通配符」搜索,這稱爲正則表達式。

/^d/i 
  • 雙斜槓只是正則表達式的分隔符,你搜索的內容是在這兩個斜線之間。
  • 以下i是一個修飾符或選項。它改變了你的正則表達式的匹配行爲,i代表不區分大小寫,意味着它匹配「d」和「D」。
  • 的第一個字符^是一個錨,它錨定到字符串的開始搜索模式,意味着比賽「d」只在開始的字符串

有關正則表達式一個很好的教程是tutorial on regular-expressions.info

如果要在字符串中的任意位置搜索字符串,只需刪除將該模式綁定到起始位置的錨,/na/就會在字符串中的任意位置找到「na」。