【发布时间】:2013-05-13 12:27:34
【问题描述】:
根据mongoid documentation on Explicit Merging ("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>
但相反,我会覆盖所有可以想象的情况:
[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>
我是不是做错了什么?
【问题讨论】:
-
很有趣,如果我使用除
id—_id或任何随机字段名称以外的字段名称,它可以正常工作。在您的情况下使用_id可能是一种方法,但它看起来仍然像一个错误。 -
实际上,它会以这种奇怪的方式表现,不仅是
_id,而且对于字段别名也是如此。我想我知道如何在 Origin 中解决这个问题。 -
这就是解决方案,谢谢。它使用
_id工作。我应该在 github 上为 Origin 项目打开一个问题吗?或者既然你知道如何修复它,你会打开一个拉取请求吗?会很棒! -
我刚刚开了一个 PR 来解决这个问题 — github.com/mongoid/origin/pull/83
-
@Phil 请回答您自己的问题,如果您找到答案,请将其标记为已解决。
标签: ruby-on-rails mongodb mongoid