I have a Mongoid document called Equipment which can embed multiple Question documents. Here are the document schemas:
class Equipment
include Mongoid::Document
include Mongoid::Timestamps
field :description
field :modelNumber
field :title
field :categoryId
field :subCategoryId
field :stateId
field :city
field :askingPrice
embeds_many :questions
end
class Question
include Mongoid::Document
field :content
attr_accessible :content
embedded_in :equipment, :inverse_of => :questions
embeds_one :answers
end
My issue is that I can retrieve a Question document based on the Question Id. However, my current query returns the parent Equipment document. I would have expected the query to return the embedded Question document. I can eventually get the embedded Question document but I have to loop through all the Question documents of the parent Equipment document.
Here is my current query:
@question = Equipment.where('questions._id' => Moped::BSON::ObjectId(params[:id])).first
Is there a way to directly obtain the embedded Question document?
Because you are using embedded documents, grabbing a single question may not make sense. It does, however, make sense in the context of the parent document. If you really just want a specific question, you can just use normal ARish syntax:
question = Question.find(params[:id])
I would strongly suggest you make sure you have an index on the question._id
field. This will help ensure this query is a fast read operation. Otherwise, Mongo will need to run through all of the Equipment
documents and check each of the embedded Question
objects.
If the above doesn't work, you can try a nested relation:
Equipment.find(params[:equipment_id]).questions.find(params[:id])
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