Есть два способа сделать это. В этих примерах давайте представим, что у меня есть следующая модель:
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/)
Я подозреваю, что агрегация будет более производительной, но это не помешает узнать несколько способов выполнения что-то.