MongoDB / Mongoid多对多建模问题

时间:2011-05-17 04:35:17

标签: mongodb mongoid

所以我在Mongo / Mongoid中对此进行建模时遇到了问题:

团队可以参加一个活动,每个活动都会有每个团队的成绩(得分,领先得分的行动等) 基本上我想要为比赛显示各种记分牌。

所以这就是我所拥有的:

Event
    has_and_belongs_to_many :teams

Team
    field :name
    field :color

    has_and_belongs_to_many :events

这很好但我需要知道如何模拟每个团队与事件之间的关系

TeamEventStats (probably not the best name)

    field :score, :type => Integer

    # etc. etc.

在ActiveRecord / RDBMS中我可以做一个直通(加入)模型,继续我的快乐方式但是 我不知道如何在Mongo中这样做。 任何人都知道这样做的好方法或更好的关系建模方法吗?

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

A有许多通道实际上只是一对多对多来创建多对多,除了外键(如团队统计数据)之外,您还可以存储关系数据。所以你可以使用类似的东西在Mongoid中轻松完成这个:

Event
  has many :team_stats

Team
  has many :team_stats

TeamStat 
  belongs_to :events
  belongs_to :team
  field :score, :type => Integer

虽然没有任何等级。如果你需要能够同时查询(给我所有团队的事件A的统计数据,也给我团队#1的所有事件的统计数据)那么它主要是一个关系模式。明白我的意思了吗?因此,除非您在应用程序中有很多其他基于分层/文档的数据,否则我可能会使用RDBMS。

但是,如果您只需要通过事件查询统计数据,那么您可以通过在每个事件中嵌入团队统计数据而不是通过其他集合关联事件和团队来使这更加友好。

按照同样的逻辑,如果您只需要团队查询统计数据,那么您可以在每个团队中嵌入事件统计数据。