ruby - 使用 Mongoid 检索嵌入式文档

标签 ruby mongodb mongoid mongoid3

我有一个名为 Equipment 的 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文档?

最佳答案

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

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

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

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

Equipment.find(params[:equipment_id]).questions.find(params[:id])

关于ruby - 使用 Mongoid 检索嵌入式文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17278413/

相关文章:

java - 如何使用spring数据计算mongo文档嵌套数组中的项目?

mongodb - 将 mgo 用于嵌套文档字段

ruby - 无法使用种子本地主机 :27017 连接到副本集

ruby-on-rails - 我可以将 shoulda 与 mongoid 一起使用吗?

ruby-on-rails - 如何在 Windows 上的一个地方运行 Ruby 和 GIT 命令

ruby - 将每个 bash 输出通过管道传输到文件

ruby - 如何为 Ruby 安装 Selenium 和 Nokogiri?

mongodb - Mongoose/MongoDB 在保存时抛出重复键错误?

ruby-on-rails - 返回数组中匹配元素的列表索引

ruby-on-rails - 防止 rspec 尝试连​​接到 mongoid