2012-03-30 17 views
13

Mongoidのドキュメントは、ワイルドカード検索を行うの一例を示します:Ruby on Rails環境でMongoidを使用したワイルドカード検索はどのように行いますか?

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

これは「D」で始まる最初の名前を持つすべての人を見つけました。

/^/iは何を表していますか?

文字列の途中に「na」という名前の人がいるのはどうすればわかりますか?たとえば、このクエリは "na"が文字列全体の部分文字列であるため "jonathan"を検索します。

この情報はウェブサイトやガイドには存在しますか?

答えて

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

Rubular.comへのリンクに+1 – Joe

+0

フィールド 'first_name'が 'Mongoid :: EncryptedString'タイプの場合、' Person.where(first_name:/ na/i) 'のようなクエリを実行できますか?私はmongoid 3.1.6を使用して、* TypeErrorを取得しています:RegexpのStringへの暗黙的な変換はありません。 –

4

これは「ワイルドカード」検索ではありません。これは正規表現と呼ばれます。

/^d/i 
  • 2つのスラッシュは、あなたがそれらの2つのスラッシュの間にあるものを検索し、唯一の正規表現の区切り記号です。
  • 次のiは修飾子またはオプションです。あなたの正規表現のマッチング動作を変更します。iは大文字小文字を区別しません。これは "d"と "D"が一致することを意味します。
  • ^がアンカーである最初の文字は、それが唯一の正規表現についての良いチュートリアルがtutorial on regular-expressions.infoある

文字列の先頭に、文字列の先頭からの検索パターンを固定するマッチ「d」を意味します

文字列内の任意の文字列を検索する場合は、パターンを先頭にバインドするアン​​カーを削除するだけで、/na/は文字列のどこにでも「na」を見つけることができます。

関連する問題