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
Entry.where('items._id' => Moped::BSON::ObjectId('50536b18baa072000f000360'))[0]
请参阅此处的文档
替代方案,这也将起作用。
Entry.find('50536b18baa072000f000360')
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.