MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Rails 4 e mongoid:construa programaticamente uma consulta com várias condições AND e OR


A consulta que você deseja criar é:
MyClass.where(
  :name.in   => [ 'John', 'Luke' ],
  :status.in => [ 'ACTIVE', 'SUSPENDED' ]
)

Um :field.in funciona da mesma forma que field in (...) em SQL e isso é apenas uma forma curta para uma instrução ou. Isso torna as coisas um pouco mais fáceis, pois você só precisa adicionar .in chamadas para os criteria keys cujos valores são arrays, algo assim:
query = criteria.each_with_object({}) do |(field, values), query|
  field = field.in if(values.is_a?(Array))
  query[field] = values
end
MyClass.where(query)