Rails - монгоидный запрос для фильтрации объектов по длине поля - PullRequest
0 голосов
/ 30 марта 2020

Я хочу отфильтровать коллекцию по длине поля. Пример: для коллекции Band я хотел бы, чтобы объекты, длина имени которых равна 10.

1 Ответ

1 голос
/ 30 марта 2020

Есть два способа сделать это. В этих примерах давайте представим, что у меня есть следующая модель:

class Band
  include Mongoid::Document

  field :name, type: String
end

Агрегирование

Если вы используете сервер MongoDB версии 3.6 или новее, вы можете использовать $expr оператор для включения операций агрегации в ваш запрос. В этом примере я использую оператор $strLenCP для поиска документов, в которых поле name имеет 5 кодовых точек Unicode:

Band.where("$expr": { "$eq": [ { "$strLenCP": "$name" }, 5 ] })

Регулярные выражения

Вы также можете использовать регулярное выражение Ruby, соответствующее любой строке из пяти символов:

Band.where(name: /\A.{5}\z/)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...