2016-05-03 21 views
0

Railsでは、正規表現を提供することによって正しい出力が得られなくても、LIKEクエリを使用してmongodbからデータをフェッチしようとしています。Rails 4 + MongoDB +検索クエリLIKEで正しい出力が得られません

モデル:ユーザー

_id, name, display_name, age, address, nick_name 
a1, Johny, Johny K, 12, New York, John 
b1, James, James Waltor, 15, New York, James 
c1, Joshua, Joshua T, 13, California, Josh 

今私は、レコードの3セットを持っています。

クエリ1:初期名でキーワードとして「ジョー」を持つ検索ユーザー

User.where(name: /^jo/i) 

出力 - 1つのレコードのみ - の代わりに、2。

クエリ2: - は、すべての列を持つテキストが

User.where($where: /^jo/i) 

適切な出力を得ていない値一致します。

答えて

0

クエリ1では、文書を出力できますか。私はあなたのレコードの1つが「名前」の中に、空白のような文字の前にあると信じています。私はちょうど同じクエリをローカルで実行し、複数のレコードを元に戻しました。

これを試してみてください: User.where(name/(.*)jo(.*)/i).countとは何が返ってくるのかを見てください。それは2に一致する必要があります。それが動作する場合は、ストアの値が間違っているかどうかを調べる必要があります。

クエリ2では、この構文を見たことがあります。 $whereは、レコードと一致するようにjs関数の文字列が実行されることを期待しています。文書内の任意のフィールドを式にマッチさせるには、各文書の各フィールドに再帰関数を実行する必要があります。

0

クエリ2がすべてのフィールドと一致するようにするには 効率的ではありませんが、Mongodbクエリの代わりにRailsアプリケーション内で実行する方法もあります。

User.all.select do | user | user.attributes.values.grep(/^jo/i).any? end

関連する問題