繁体   English   中英

如何在mongodb的rails中编写LIKE语句

[英]how can I write LIKE statement in rails for mongodb

当我使用整个单词时,搜索仍然有效,但我也希望部分单词能够被识别。

我在这里有表格:

= form_tag({}, method: :get) do
      = text_field_tag :query, query, class: 'form-input search__input', placeholder: t('.placeholder')
      - if query.nil?
        %span.search__icon.fa.fa-search{ aria: { hidden: 'true' } }
      - else
        = link_to more_path do
          %span.search__icon.text-success.fa.fa-times{ aria: { hidden: 'true' } }

控制器:

  def set_query
    @query = params[:query]
  end


  def set_documents
    @documents = @folder ? @folder.documents : current_user.documents
    @documents = (params[:query] ? @documents.where(
      :$text => {:$search => params[:query]}
    ) : @documents).page(params[:page])
  end

我尝试将其添加到控制器中以使其按需运行:

@documents = Document.where('name LIKE ?', "%#{@query}%")
      end

但是我得到了错误:

wrong number of arguments (given 2, expected 1)

我应该如何写,以便搜索不仅可以对整个单词,而且可以对部分单词进行搜索。

如果您使用的是Mongoid,则可以在where使用正则表达式:

Document.where(name: /.*(#{@query})+.*/i)

或尝试any_of

Document.any_of(name: /.*(#{Regexp.escape(@query)}).*/i)

因此,您的set_documents方法应类似于:

def set_documents
  @documents = @folder ? @folder.documents : current_user.documents
  @documents = (params[:query] ? @documents.where(
    name: /.*#{@query}.*/i
  ) : @documents).page(params[:page])
end

Mongoid支持查询中的正则表达式

User.where(:name => /.*anand.*/i )

在这里为非区分大小写的匹配。

要么

search_term = params[:search_term]
User.where({:name => Regexp.new ("/.*"+search_term+".*/") })

您可以在reg对象中编写任何正则表达式

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM