我正在尝试查找其文本中包含单词test的所有文档。以下工作正常:
@tweets = Tweet.any_of({ :text => /.*test.*/ })
但是,我希望能够搜索用户提供的字符串。我认为下面的内容可行,但事实并非如此:
searchterm = (params[:searchlogparams][:searchterm])
@tweets = Tweet.any_of({ :text => "/.*"+searchterm+".*/" })
我已经尝试了我能想到的一切,任何人都知道我能做些什么来使这项工作。
提前致谢。
答案 0 :(得分:25)
searchterm = (params[:searchlogparams][:searchterm])
@tweets = Tweet.any_of({ :text => Regexp.new ("/.*"+searchterm+".*/") })
或
searchterm = (params[:searchlogparams][:searchterm])
@tweets = Tweet.any_of({ :text => /.*#{searchterm}.*/ })
答案 1 :(得分:15)
mongodb正则表达式查询没有任何问题。问题是将变量传递给ruby regex字符串。你不能像普通字符串那样将字符串与正则表达式混合
相反
"/.*"+searchterm+".*/"
试试这个
>>searchterm = "test"
>>"/#{searchterm}/"
>> "/test/"
答案 2 :(得分:1)
@tweets = Tweet.any_of({ :text => Regexp.new (".*"+searchterm+".*") })
没问题并且有结果
答案 3 :(得分:0)
这对我有用:
Model.find(:all, :conditions => {:field => /regex/i})
答案 4 :(得分:0)
@tweets = Tweet.any_of({ :text => Regexp.new ("/.*"+searchterm+".*/") })
是有效的,但没有结果
@tweets = Tweet.any_of({ :text => Regexp.new (".*"+searchterm+".*") })
没问题并且有结果
@tweets = Tweet.any_of({ :text => /.*#{searchterm}.*/ })
是工作,没有结果
我的mongoid版本是3.1.3,ruby版本是1.9.3