嵌入式in在mongoid中的重要性

时间:2013-03-24 04:55:03

标签: mongodb mongoid polymorphism

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

class Band
  include Mongoid::Document
  embeds_many :photos
end

class Photo
  include Mongoid::Document
  embedded_in :Band
end

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

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

1 个答案:

答案 0 :(得分:4)

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

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