我有这个问题:
User.or( { name: 'John' }, { name: 'Sara' } ).or( { age: 17 }, { age: 18 } ) )
Run Code Online (Sandbox Code Playgroud)
它返回下一个标准:
#<Mongoid::Criteria
selector: {"enabled"=>true, "$or"=>[{"name"=>"John"}, {"name"=>"Anoun"}, {"age"=>17}. {"age"=>18}]}
options: {}
class: User
embedded: false>
Run Code Online (Sandbox Code Playgroud)
但我想做'和'两个'或'返回这样的东西:
#<Mongoid::Criteria
selector: {"enabled"=>true, "$and"=>[
{"$or"=>[{"name"=>"John"}, {"name"=>"Anoun"}]},
{"$or"=>[{"age"=>17}, {"age"=>18}]}
] }
options: {}
class: User
embedded: false>
Run Code Online (Sandbox Code Playgroud)
怎么会是查询?
小智 26
这可能对你有帮助,
User.where(enabled: true)
.and(
User.or( { name: 'John' }, { name: 'Sara' } ).selector,
User.or( { age: 17 }, { age: 18 } ).selector
)
Run Code Online (Sandbox Code Playgroud)
这将返回:
#<Mongoid::Criteria
selector: {"enabled"=>true, "$and"=>[{"$or"=>[{"name"=>"John"}, {"name"=>"Sara"}]}, {"$or"=>[{"age"=>17}, {"age"=>18}]}]}
options: {}
class: User
embedded: false>
Run Code Online (Sandbox Code Playgroud)
您不需要链接$或查询 - 您只需要名称在列表中的文档,以及年龄在列表中的位置.Mongo很容易提供:
db.users.find({enabled: true, name: {$in: ["John", "Sara"]}, age: {$in: [17, 18]}})
Run Code Online (Sandbox Code Playgroud)
用Mongoid的说法,这很简单:
User.where(enabled: true, name.in: ["John", "Sara"], age.in: [17, 18])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6456 次 |
| 最近记录: |