1

来自 = [:TPE, :TOKYO, :CHICHAGO]

where(
  from: /.*#{from}.*/i,
)

输入文件

{
    from: 'PARIS'
},
{
    from: 'PARIS'
},
{
    from: 'TOKYO'
},
{
    from: 'TPE'
}    

输出文件

{
    from: 'TOKYO'
},
{
    from: 'TPE'
}    
4

1 回答 1

1

您可以使用$in运算符来查看字段是否与数组中的任何内容匹配:

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还要注意在使用正则表达式交替运算符 ( ) 加入组件之前存在调用|

于 2015-08-07T17:45:45.613 回答