Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Mongoid 2.4 Querying For Embedded Document By Id Failing

We have a model Entry with an embedded Item:

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

If i query mongo directly for an entry by item id:

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

It returns the Entry:

505363b36181ce00020006b1 {"created_at":"2012-09-14T17:04:51Z","items":[{"_id":"50536b1a2b17b3...

Yet when i query via Mongoid:

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

All other queries work (for other fields on items and for fields on entry). But not for id.

We're running mongoid (2.4.12).

like image 209
LMH Avatar asked Sep 14 '12 18:09

LMH


2 Answers

Apparently you have to wrap the ID in BSON::ObjectId(), so:

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

Otherwise mongo will sporatically not return the result.

like image 194
LMH Avatar answered Dec 19 '22 22:12

LMH


This works with Mongoid 4.0.0.beta1:

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

Here is the link to the documentation.

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

like image 36
user3368559 Avatar answered Dec 19 '22 23:12

user3368559