簡體   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