繁体   English   中英

Mongoid 2.4通过Id失败查询嵌入式文档

[英]Mongoid 2.4 Querying For Embedded Document By Id Failing

我们有一个带有嵌入式项目的模型条目:

class Entry
  include Mongoid::Document
  include Mongoid::Timestamps
  include Mongoid::Spacial::Document
  embeds_many :items, cascade_callbacks: true
...

class Item
  include Mongoid::Document
  include Mongoid::Timestamps
  include Mongoid::Spacial::Document
  embedded_in :entry
...

如果我按项目ID直接查询mongo:

{"items._id" : ObjectId("50536b18baa072000f000360")}

它返回条目:

505363b36181ce00020006b1 {“created_at”:“2012-09-14T17:04:51Z”,“items”:[{“_ id”:“50536b1a2b17b3 ...

然而,当我通过Mongoid查询时:

irb(main):002:0> Entry.where('items._id' => '50536b18baa072000f000360')[0]
=> nil

所有其他查询都有效(对于项目和输入字段的其他字段)。 但不是为了id。

我们正在运行mongoid(2.4.12)。

显然你必须将ID包装在BSON :: ObjectId()中,所以:

Entry.where('items._id' => BSON::ObjectId('50536b18baa072000f000360'))[0]

否则mongo将无法返回结果。

这适用于Mongoid 4.0.0.beta1:

Entry.where('items._id' => BSON::ObjectId.from_string('50536b18baa072000f000360'))

这是文档的链接。

http://api.mongodb.org/ruby/current/BSON/ObjectId.html#from_string-class_method

Entry.where('items._id' => Moped::BSON::ObjectId('50536b18baa072000f000360'))[0]请参阅此处的文档

替代方案,这也将起作用。

Entry.find('50536b18baa072000f000360')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM