Mongoid 2.4 Запрос для встроенного документа по идентификатору

У нас есть модель Entry со встроенным элементом:

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
...

Если я запрашиваю mongo непосредственно для записи по элементу id:

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

Он возвращает запись:

505363b36181ce00020006b1 { "Created_at": "2012-09-14T17: 04: 51Z", "элементы": [{ "_ идентификатор": "50536b1a2b17b3...

Тем не менее, когда я запрашиваю через Mongoid:

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

Все остальные запросы работают (для других полей для элементов и для полей при вводе). Но не для id.

Мы запускаем мангоид (2.4.12).

Ответ 1

По-видимому, вам нужно обернуть идентификатор в BSON:: ObjectId(), чтобы:

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

В противном случае mongo будет sporatically не возвращать результат.

Ответ 3

Entry.where('items._id' => Moped::BSON::ObjectId('50536b18baa072000f000360'))[0] см. документацию здесь

Ответ 4

Альтернатива, это также сработает.

Entry.find('50536b18baa072000f000360')