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).
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.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With