mongodb - embedded_in 在 mongoid 中的意义

标签 mongodb mongoid polymorphism

我试图理解 mongoid 中的关系,但无法超越以下内容:

class Band
  include Mongoid::Document
  embeds_many :photos
end

class Photo
  include Mongoid::Document
  embedded_in :Band
end

在上面的代码中,指示Band embed_many phtos 应将完整的照片数据存储在Band 中。但是,需要将 embedded_in 放在 Photo 类中吗? Photo不放embedded_in,是不是自动多态了?

此外,查询 Photo.all 是否会获取嵌入在 Bands 中的照片?如果是,这是embedded_in的原因吗?我们可以为一个类设置多个 embedded_in 吗?

最佳答案

embedded_in 调用需要将方法添加到 Photo 类,以便您可以访问嵌入照片的 band。就像您使用 has_manybelongs_to 一样,尽管外键仅存储在具有 belongs_to 的对象中。它还添加了 methods to check if the Photo is persisted等等。是的,you can have multiple embedded_in for one class .

Photo.all 不会为您提供嵌入在其他类中的照片。通常,如果您只通过另一个模型访问一个模型,您会嵌入它。当使用外键关系时,一次获取整个文档比再次往返数据库更便宜。因此,如果您需要类似 Photo.all 的内容,则不应嵌入 Photo

关于mongodb - embedded_in 在 mongoid 中的意义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15595342/

相关文章:

java - 通过父类(super class)对象的 ArrayList 访问子类方法?

javascript - insertMany 总是返回重复的 _id 错误

MongoDb:如何从 .gz 文件导入转储数据?

ruby-on-rails - 如何使用 Mongoid 和 Rails 对结果进行分组?

ruby-on-rails - Rails - MongoDB(Mongoid)在哪里存储数据库和日志?

带有 boost scoped_ptr 的 C++ 多态性

sql - 如何在mongodb上检索空查找条目?

node.js - Mongoose 协会限制

ruby-on-rails - 我可以设置 Mongoid 查询超时吗? Mongoid 不会终止长时间查询

python - 引用纯虚方法