Embedded_in 在 mongoid 中的意义

Kir*_*ran 3 polymorphism mongodb mongoid

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

class Band
  include Mongoid::Document
  embeds_many :photos
end

class Photo
  include Mongoid::Document
  embedded_in :Band
end
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,Instructing Band to embed_many phtos 将完整的照片数据存储在Band 中。但是,什么需要在 Photo 类中放入 Embedded_in 呢?如果我们不把embedded_in放在Photo里面,会不会自动多态?

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

小智 5

embedded_in调用需要的方法添加到Photo类,以便您可以访问其中的照片被嵌入了乐队。就像您使用has_manyandbelongs_to虽然外键仅存储在具有belongs_to. 它还添加了检查照片是否持久化等的方法。是的,一个班级可以有多个embedded_in

Photo.all不会给你嵌入其他类的照片。通常,如果您只通过另一个模型访问模型,您就会嵌入它。在使用与外键的关系时,一次获取整个文档比再次访问数据库更便宜。所以如果你需要类似的东西,Photo.all你不应该嵌入Photo.