5

次の形式のクエリを作成したいと思います。

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

ドキュメントを読んで、次のようになるはずだと思いましたMongoid

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

しかし、それではうまくいきません。mongo セレクターは、単にすべてのフィールドの「$or」です。これを行う正しい方法は何ですか?ありがとう。

また、その逆もありがたいです。たとえば、このクエリを実行する方法は次のとおりです。

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

1 に答える 1

6

mongoMongoid構文 ($something演算子)の組み合わせを使用する必要があったようです。

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

その逆は、演算子を置き換えるだけです。

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

これが誰かを助けることを願っています:)

于 2012-11-09T04:39:24.607 に答える