10

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

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

所有其他查询都有效(对于项目上的其他字段和条目上的字段)。但不是为了身份证。

我们正在运行 mongoid (2.4.12)。

4

4 回答 4

19

显然您必须将 ID 包装在 BSON::ObjectId() 中,因此:

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

否则 mongo 将偶尔不返回结果。

于 2012-09-18T14:52:20.540 回答
5

这适用于 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

于 2014-04-10T22:55:15.987 回答
0

Entry.where('items._id' => Moped::BSON::ObjectId('50536b18baa072000f000360'))[0]在此处 查看文档

于 2013-11-14T12:58:14.823 回答
-3

或者,这也可以。

Entry.find('50536b18baa072000f000360')
于 2014-05-20T22:14:17.557 回答