Using a combination of ANDs and ORs in Mongoid

余生颓废 提交于 2019-12-22 07:01:13

问题


I'd like to construct a query of the form:

select * from some_table
where 
  (field1 = 'x' or field2 = 'y') 
  and 
  (field3 = 'z' or field4 = 'w')

From reading the docs, I thought it should look something like this in Mongoid:

SomeTable.or({:field1 => 'x'}, {:field2 => 'y'})
         .and  #  or is it .intersect?
         .or({:field3 => 'z'}, {:field4 => 'w'})

But then that doesn't work - the mongo selector is simply an "$or" of all the fields. What's the correct way to do this? thanks.

I'd also appreciate the inverse of that, e.g - how to perform this query:

select * from some_table
where 
  (field1 = 'x' and field2 = 'y') 
  or
  (field3 = 'z' and field4 = 'w') 

回答1:


It seems I needed to use a combination of mongo and Mongoid syntax (the $something operator):

SomeTable.and( :$or => [ { :field1 => 'x' }, { :field2 => 'y' } ])
         .and( :$or => [ { :field3 => 'z' }, { :field4 => 'w' } ]) 

The inverse of that is just replacing the operators:

SomeTable.or( :$and => [ { :field1 => 'x' }, { :field2 => 'y' } ])
         .or( :$and => [ { :field3 => 'z' }, { :field4 => 'w' } ]) 

Hope this helps someone :)



来源:https://stackoverflow.com/questions/13294860/using-a-combination-of-ands-and-ors-in-mongoid

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!