【问题标题】:Searching MongoDB with Rails使用 Rails 搜索 MongoDB
【发布时间】:2012-10-10 19:39:05
【问题描述】:

我正在使用 ruby​​ 1.9.3p194 和 rails 3.2.5 当我这样做时

@authors = Author.all

通过从我的数据库中输出所有名称,它可以正常工作。 但是

@authors = Author.where("name like ?", "%#{params[:q]}%")

不工作。我正在使用MongoDB。我想在输入 R 时输出名称(Ram)。 有什么解决办法?


通过这种方法,我只能通过我的字段 :name 搜索 params[:q]。我怎样才能添加其他字段名称,比如我想同时在文本字段 :role 、 :email 中搜索这个 params[:q] ?我用过||但它给出了错误。 我必须在评论中写这个,但因为我的评论列表很长。我在这里问这个问题。 很抱歉。

【问题讨论】:

    标签: ruby-on-rails ruby mongodb


    【解决方案1】:

    MongoDB 不像 SQL 那样使用“LIKE”查询。 您(可以)使用正则表达式: http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-RegularExpressions

    要解决您的具体问题,您可以使用 @authors = Author.where(name: /#{params[:q]}/),但我不完全确定这是否是一个安全问题。

    【讨论】:

    • /#{Regexp.escape(params[:q])}/ 可能会为您提供更好的服务。值得注意的是,您将仅限于 MongoDB 支持的正则表达式,而不是 Ruby 的。
    • 你知道搜索条件也适用于大写字母吗?我的意思是说(如果 a 那么它会显示所有相关数据,包括大写字母)对于 ex a->apple,Aeroplane
    • 要使其不区分大小写,请在末尾添加“i”,如下所示:/#{Regexp.escape(params[:q])}/i
    • 我们是否可以对它进行编码,这样如果选择了一个数据,则它不会第二次显示。例如,我选择 m(results mongo monkey) 并且 mongo 在那里被选中。第二次如果我选择 m 则只显示猴子。我正在使用 jquery 令牌。可能我必须更改 js 还是我很困惑。
    • @regmiprem 可能,但这应该是另一个问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-09
    • 1970-01-01
    • 1970-01-01
    • 2017-05-14
    • 2018-01-10
    • 2016-11-20
    相关资源
    最近更新 更多