使用Mongoid检索嵌入式文档
问题描述:
我有一个名为Equipment的Mongoid文档,它可以嵌入多个Question文档。这里是文档模式:使用Mongoid检索嵌入式文档
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
我的问题是,我可以根据问题ID检索一个问题文档。但是,我当前的查询返回父设备文档。我会希望查询返回嵌入的问题文档。我最终可以获得嵌入式问题文档,但我必须遍历父级设备文档的所有问题文档。
这里是我当前的查询:
@question = Equipment.where('questions._id' => Moped::BSON::ObjectId(params[:id])).first
有没有办法直接获得嵌入问题的文件?
答
因为您使用的是嵌入式文档,所以抓住一个问题可能没有意义。但是,它确实在母文档的上下文中有意义。如果你真的只想要一个具体的问题,你可以使用正常的阿里什语法:
question = Question.find(params[:id])
我强烈建议你要确保你对question._id
领域的指标。这将有助于确保此查询是一个快速读取操作。否则,Mongo将需要遍历所有Equipment
文档并检查每个嵌入的Question
对象。
如果以上不工作,你可以尝试嵌套关系:
Equipment.find(params[:equipment_id]).questions.find(params[:id])
答
随着轨(3.2.15)和mongoid(3.1.5),我只能做到这样:
@equipment = Equipment.where('questions._id' => Moped::BSON::ObjectId(params[:id])).first
@question = @equipment.questions.find(params[:id])
感谢您的回应!您提供的两个建议对我而言并不适用。 :-(然而,这对我很有用:equipment = Equipment.find(params [:id]) question = equipment.questions.find(params [:question_id])。关于如何将这两个查询合并为一个? –
@RichBlumer基本上是我写的第二个查询,你只是有不同的名称为你的参数。'question = Equipment.find(params [:id])。questions.find(params [:question_id])' –
我同意。我的问题是我不能像你一样把它们链接在一起,总是在问题上出现错误,没有这样的方法,我只是试着把它链接在一起,而且它工作正常!感谢您的帮助! –