Как сделать частичный поиск по рельсам? - PullRequest
0 голосов
/ 28 июня 2019

Я пытаюсь получить все карты, которые не принадлежат текущему пользователю, и в его названии содержатся некоторые ключевые слова.

Что у меня есть после исследования, так это код ниже.

@other_cards = Card.where(:user_id.ne => @temp_current_user, "title LIKE ?" => "%Business%").limit(10).order('created_at desc down_title asc')

Но записи не возвращаются, даже если они присутствуют.

Я также попытался пропустить условие: user_id и все ограничения и заказы, в результате чего этот простой кодпроверить, вернется ли что-нибудь

@other_cards = Card.where("title LIKE ?", "%Business%")

enter image description here

РЕДАКТИРОВАТЬ

Я также попытался поставить условиякак массив предложил в первом комментарии.Это также привело к ошибке

enter image description here

EDIT 2

Прикрепление скриншота выполнения запроса в консоли rails

enter image description here

1 Ответ

1 голос
/ 29 июня 2019
Синтаксис

LIKE является частью SQL. MongoDB и Mongoid не (напрямую) поддерживают SQL. Общее правило: методы Ruby переносятся из ActiveRecord в Mongoid, например, следующие операции работают с AR и Mongoid:

Card.where(id: 123)

... но как только вы начнете указывать сложные условия в ключах или значениях, они часто относятся к базе данных, с которой вы работаете. В предоставленном вами коде синтаксис :user_id.ne не будет распознаваться ActiveRecord, а Mongoid / MongoDB не распознает title LIKE ?.

Ваша проблема была:

Я пытаюсь получить все карты, которые не принадлежат текущему пользователю, и его заголовок содержит несколько ключевых слов .

MongoDB имеет встроенную возможность полнотекстового поиска, которая является превосходным решением для попытки сопоставления ключевых слов с регулярными выражениями или операторами SQL LIKE. MongoDB имеет хорошую документацию для полнотекстового поиска здесь . Драйвер Ruby содержит дополнительную документацию и примеры использования полнотекстового поиска здесь . В Mongoid в настоящее время нет документации для полнотекстового поиска (в настоящее время выполняется запрос на добавление, чтобы добавить его здесь ), но суть в том, чтобы объединить документацию драйвера, на которую ссылались ранее, с документацией здесь о том, как работать с индексами в Mongoid в целом.

...