Ruby on rails “相交Mongoid”;在-询问

Ruby on rails “相交Mongoid”;在-询问,ruby-on-rails,mongodb,mongoid,Ruby On Rails,Mongodb,Mongoid,根据on显式合并(“Queryable#in-defaults to intersect”),我希望得到以下查询: Contact.in(id: ['a', 'b']).in(id: ['b', 'c']) 要产生这样的结果: => #<Mongoid::Criteria selector: {"_id"=>{"$in"=>["b"]}} options: {} class: Contact embedded: false> => 选项:

根据on显式合并(“Queryable#in-defaults to intersect”),我希望得到以下查询:

Contact.in(id: ['a', 'b']).in(id: ['b', 'c'])
要产生这样的结果:

=> #<Mongoid::Criteria
  selector: {"_id"=>{"$in"=>["b"]}}
  options:  {}
  class:    Contact
  embedded: false>
=>
选项:{}
类别:联系人
嵌入:false>
但我得到的是一个覆盖所有可以想象的情况:

[1] pry(main)> Contact.in(id: ['a', 'b']).in(id: ['b', 'c'])
=> #<Mongoid::Criteria
  selector: {"_id"=>{"$in"=>["b", "c"]}}
  options:  {}
  class:    Contact
  embedded: false>

[2] pry(main)> Contact.in(id: ['a', 'b']).intersect.in(id: ['b', 'c'])
=> #<Mongoid::Criteria
  selector: {"_id"=>{"$in"=>["b", "c"]}}
  options:  {}
  class:    Contact
  embedded: false>

[3] pry(main)> Contact.in(id: ['a', 'b']).union.in(id: ['b', 'c'])
=> #<Mongoid::Criteria
  selector: {"_id"=>{"$in"=>["b", "c"]}}
  options:  {}
  class:    Contact
  embedded: false>
[1]pry(main)>联系人.in(id:['a','b']).in(id:['b','c'])
=>{“$in”=>[“b”,“c”]}
选项:{}
类别:联系人
嵌入:false>
[2] pry(main)>Contact.in(id:['a','b'])。intersect.in(id:['b','c'])
=>{“$in”=>[“b”,“c”]}
选项:{}
类别:联系人
嵌入:false>
[3] pry(main)>Contact.in(id:['a','b']).union.in(id:['b','c'])
=>{“$in”=>[“b”,“c”]}
选项:{}
类别:联系人
嵌入:false>

我做错什么了吗?

您面临的问题是由Mongoid gem引起的。升级到Mongoid gem的最新版本将解决此问题

更多关于这个bug的信息可以在这里找到


有趣的是,如果我使用的字段名不是
id
-
\u id
或任何随机字段名,那么它工作正常。在您的情况下使用
\u id
可能是一种方法,但它看起来仍然像一个bug。实际上,它不仅会以这种奇怪的方式使用
\u id
,还会使用字段别名。我想我知道如何在Origin中解决这个问题。这就是解决方案,谢谢。它使用
\u id
工作。我应该在github上为源项目打开一个问题吗?或者,既然您知道如何修复它,您是否打开拉取请求?那太好了!我刚刚打开了一个修复此问题的PR-@Phil请回答您自己的问题,如果找到答案,请将其标记为已解决。