2013-07-25 6 views
11

私はこのクエリ持っMongoid: - :</p> <pre><code>User.or({ name: 'John' }, { name: 'Sara' }).or({ age: 17 }, { age: 18 })) </code></pre> <p>それは、次の基準を返す:ANDまたはクエリ

#<Mongoid::Criteria 
    selector: {"enabled"=>true, "$or"=>[{"name"=>"John"}, {"name"=>"Anoun"}, {"age"=>17}. {"age"=>18}]} 
    options: {} 
    class: User 
    embedded: false> 

をしかし、私はやりたい 'と' 何かを返す2 'または' をbetweendこのように:

#<Mongoid::Criteria 
    selector: {"enabled"=>true, "$and"=>[ 
    {"$or"=>[{"name"=>"John"}, {"name"=>"Anoun"}]}, 
    {"$or"=>[{"age"=>17}, {"age"=>18}]} 
    ] } 
    options: {} 
    class: User 
    embedded: false> 

クエリはどのようになりますか?

答えて

25

この本は戻ります、

User.where(enabled: true) 
    .and( 
      User.or({ name: 'John' }, { name: 'Sara' }).selector, 
      User.or({ age: 17 }, { age: 18 }).selector 
     ) 

あなたを助けるかもしれない:あなたはここにチェーン$またはクエリを必要としない

#<Mongoid::Criteria 
    selector: {"enabled"=>true, "$and"=>[{"$or"=>[{"name"=>"John"}, {"name"=>"Sara"}]}, {"$or"=>[{"age"=>17}, {"age"=>18}]}]} 
    options: {} 
    class: User 
    embedded: false> 
6

- あなただけの名前がリストにあるドキュメントをしたいです、年齢はリストに記載されています。 Mongoのが容易にこれを提供する:Mongoid用語で

db.users.find({enabled: true, name: {$in: ["John", "Sara"]}, age: {$in: [17, 18]}}) 

が、これは単にある:

User.where(enabled: true, name.in: ["John", "Sara"], age.in: [17, 18]) 
関連する問題

 関連する問題