【问题标题】:Intersecting Mongoid "in"-Queries相交 Mongoid “in”-查询
【发布时间】: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


【解决方案1】:

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

有关该错误的更多信息可以在这里找到

https://github.com/mongoid/origin/pull/83

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-25
    • 1970-01-01
    • 2014-05-19
    • 2016-10-02
    • 2011-09-01
    • 1970-01-01
    相关资源
    最近更新 更多