web-dev-qa-db-ja.com

モンゴイドの変数でLIKE / regexを使用する

テキストにWordテストが含まれているすべてのドキュメントを検索しようとしています。以下は正常に機能します。

@tweets = Tweet.any_of({ :text => /.*test.*/ })

ただし、ユーザーが指定した文字列を検索できるようにしたい。以下はうまくいくと思いましたが、うまくいきません:

searchterm = (params[:searchlogparams][:searchterm])
@tweets = Tweet.any_of({ :text => "/.*"+searchterm+".*/" })

私は考えられるすべてを試しました、誰もがこの仕事をするために私が何ができるか知っています。

前もって感謝します。

22
Hinchy
searchterm = (params[:searchlogparams][:searchterm])
@tweets = Tweet.any_of({ :text => Regexp.new ("/.*"+searchterm+".*/") })

または

searchterm = (params[:searchlogparams][:searchterm])
@tweets = Tweet.any_of({ :text => /.*#{searchterm}.*/ })
27
Nat

Mongodb正規表現クエリに問題はありません。問題は、変数をRuby正規表現文字列に渡すことです。通常の文字列のように、文字列と正規表現を混在させることはできません。

代わりに

 "/.*"+searchterm+".*/"

これを試して

  >>searchterm = "test"
  >>"/#{searchterm}/"
  >> "/test/" 
15
RameshVel
@tweets = Tweet.any_of({ :text => Regexp.new (".*"+searchterm+".*") })

大丈夫で結果があります

1
sitoto

これは私のために次のことをすることでうまくいきました:

Model.find(:all, :conditions => {:field => /regex/i})
0
methodofaction
@tweets = Tweet.any_of({ :text => Regexp.new ("/.*"+searchterm+".*/") })  

仕事ですが、結果はありません

@tweets = Tweet.any_of({ :text => Regexp.new (".*"+searchterm+".*") })

大丈夫で結果があります

@tweets = Tweet.any_of({ :text => /.*#{searchterm}.*/ })

仕事です、結果はありません

私のモンゴイドバージョンは3.1.3で、Rubyバージョンは1.9.3です。

0
shooter