The #matches criteria are overwritten instead of being merged
Post.where(:comments.matches => {author: /asdf/}). where(:comments.matches => {body: /asdf/}) # => #<Mongoid::Criteria # selector: {:comments=>{"$elemMatch"=>{:body=>/asdf/}}}, # options: {}, # class: Post, # embedded: false> Post.where(:comments.matches => {body: /asdf/}). where(:comments.matches => {author: /asdf/}) # => #<Mongoid::Criteria # selector: {:comments=>{"$elemMatch"=>{:author=>/asdf/}}}, # options: {}, # class: Post, # embedded: false>