限制从mongoid多态关系返回的字段

时间:2012-03-20 04:31:35

标签: mongoid

我在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)

但是这可能是多态关系吗?

1 个答案:

答案 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模型中进行发布计数,这样您每次都不会映射数百个帖子。

我希望这有帮助,如果没有向我提供更多信息,我会更新。