mongoid / origin

A Ruby DSL for building MongoDB queries
http://mongoid.org/en/origin/index.html
MIT License
62 stars 29 forks source link

Enchance chained where calls. #109

Open durran opened 9 years ago

durran commented 9 years ago

When chaining two where criteria on the same field, former ones will be ignored, which should be a bug.

For example, User.where(role: 1).where(role: 2) now generates selector: {"role"=>2}, but the expected result should be selector: {"role"=>{"$in"=>[]}}.

Other examples:

User.where(role: 1).in(role: [2, 3]) generates selector: {"role"=>{"$in"=>[]}}, this is correct. But User.in(role: [2, 3]).where(role: 1) generates selector: {"role"=>1}, which should not be right.

User.in(role: [1, 2]).in(role: [2, 3]) can correctly generate selector: {"role"=>{"$in"=>[2]}}, but User.where(:role.in => [1, 2]).where(:role.in => [2, 3]) generates selector: {"role"=>{"$in"=>[2, 3]}}.

See mongoid/mongoid#4002