我在mongoid中有一个多态关系,如下所示:
class Company
include Mongoid::Document
field :name, :type => String
has_many :posts, as: :postable
end
class Person
include Mongoid::Document
field :name, :type => String
has_many :posts, as: :postable
end
class Post
include Mongoid::Document
belongs_to :postable, polymorphic: true
end
我希望有时(而不是大部分时间)只加载postable的某些字段。在非多态关系中(比如只有一个人有帖子),我可以这样做:
Person.only(:name).find(some_post.postable_id)
但是这可能是多态关系吗?
答案 0 :(得分:0)
我可以看到一些方法,但我不确定哪种方法最好。如果您开始扫描多个文档以获得答案,那么复杂关系不是一种强度MongoDB和其他NoSQL和查询可能会变得昂贵。
使用where:
Person.where(name: "name").posts.where(postable_id: "id")
从帖子中找到父母:
Post.where(id: "id").person.only(:name)
(请注意,postable_id和id不是相同的值!)
但是,要小心。如果你所做的只是列出帖子,你可能最好在帖子中包括这个人的姓名,并写一个回调来更新这个人姓名,如果他们更改了他们的名字。或者,如果您要链接到某人的评论,为什么不在Person模型中包含评论ID(或足够的数据来建立链接),这样您就可以通过一个文档调用获得所有评论。同样,如果您正在计算,请使用回调在Person模型中进行发布计数,这样您每次都不会映射数百个帖子。
我希望这有帮助,如果没有向我提供更多信息,我会更新。