Вы можете использовать $in
operator, чтобы увидеть, подходит ли какое-либо поле в массиве:
where(:from => { :$in => array })
Mongoid заплата операторы MongoDB в Symbol
как методы, так что вы могли бы также сказать:
where(:from.in => array)
Если вы действительно ищете значения, которые содержат любые из значений в массиве, то вы могли бы просто построить одного регулярное выражение, которое делает это с помощью чередования:
re = /#{array.map { |s| Regexp.escape(s.to_s) }.join('|')}/i
Model.where(:from => re)
Обратите внимание, что нет передней или задней .*
в регулярных выражениях, что и ничего полезного не делает. Также обратите внимание на наличие вызовов Regexp.escape
до того, как компоненты будут соединены с оператором чередования регулярных выражений (|
).
Привет, может ли регулярное выражение также применяться в операторе '$ in'? – newBike
Вы ищете сопоставление шаблонов, а не строгое равенство? –
да! как вы можете видеть, изначально я совпадаю с этим способом 'from: /.*# {from}. */i,', но я не знал, как его применить в операторе '$ in'. – newBike