MongoID и проблема с несколькими ключами - PullRequest
0 голосов
/ 15 декабря 2010

У меня есть модель Item с индексированным полем с именем _key, то есть массивом строк (ключевые слова для поиска).Теперь мне нужно выполнить автозаполнение для этой модели (через JSON) в другой форме, и проблема в том, что вместо точного поиска по всем словам, введенным пользователем, мне нужно выполнить точный поиск по всем, кроме одного, последним словам.Итак, я сделал следующие области действия в этой модели:

scope :find_by_keywords, lambda { |keys| where(:_keys.all => keys) }
scope :for_autocomplete, lambda { |keys| where(:_keys.all => keys[0..-2], :_keys => /^#{keys[-1]}/i ) }

первая область для точного поиска работает хорошо, но у меня есть проблемы со второй областью для автозаполнения.MongoID оптимизирует (или что-то в этом роде) этот запрос, поэтому он становится

db_development['items'].find({:_keys=>/^qwer/i}, {})

, т. Е. Он всегда пропускает первое условие.Это неудивительно, потому что для разных условий нужны разные критерии на поле.Поэтому я перепробовал много-много вариантов.Различные комбинации .all и .in, отдельные для разных 'wheres', метода 'all_in', 'find (: условие => ...)' и так далее.Не могли бы вы предложить, как я могу сделать эту работу?

1 Ответ

0 голосов
/ 16 декабря 2010

Я нашел такое решение:

scope: for_autocomplete, lambda {| keys |где (: _ keys.all => keys [0 ..- 2] + [/ ^ # {keys [-1]} /])}

Кажется, работает.

...