4

我有一个名为 Equipment 的 Mongoid 文档,它可以嵌入多个 Question 文档。以下是文档架构:

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 文档?

4

2 回答 2

5

因为您使用的是嵌入式文档,所以抓住一个问题可能没有意义。但是,它在父文档的上下文中是有意义的。如果你真的只是想要一个特定的问题,你可以使用普通的 ARish 语法:

question = Question.find(params[:id])

我强烈建议您确保在该question._id字段上有一个索引。这将有助于确保此查询是快速读取操作。否则,Mongo 将需要遍历所有Equipment文档并检查每个嵌入的Question对象。

如果上述方法不起作用,您可以尝试嵌套关系:

Equipment.find(params[:equipment_id]).questions.find(params[:id])
于 2013-06-24T15:09:22.200 回答
3

使用 rails (3.2.15) 和 mongoid (3.1.5) 我只能这样做:

@equipment = Equipment.where('questions._id' => Moped::BSON::ObjectId(params[:id])).first
@question = @equipment.questions.find(params[:id])
于 2014-03-15T14:02:07.360 回答