Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB/Mongoid多对多建模问题_Mongodb_Mongoid - Fatal编程技术网

MongoDB/Mongoid多对多建模问题

MongoDB/Mongoid多对多建模问题,mongodb,mongoid,Mongodb,Mongoid,因此,我在Mongo/Mongoid中对此进行建模时遇到了一个问题: 团队可以参加一个活动,每个活动都会对每个团队产生结果(得分、领先得分的行动等) 基本上,我想显示一个记分牌的事件排序 TeamEventStats (probably not the best name) field :score, :type => Integer # etc. etc. 这就是我所拥有的: Event has_and_belongs_to_many :teams Tea

因此,我在Mongo/Mongoid中对此进行建模时遇到了一个问题:

团队可以参加一个活动,每个活动都会对每个团队产生结果(得分、领先得分的行动等) 基本上,我想显示一个记分牌的事件排序

TeamEventStats (probably not the best name)

    field :score, :type => Integer

    # etc. etc.
这就是我所拥有的:

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怎么做。
有谁知道这样做的好方法或者更好的关系建模方法吗?

一个“有很多到一个”实际上只是一对多对一,创建一个多对多,额外的好处是,除了外键之外,你还可以存储关系数据(比如你的团队统计数据)。因此,您可以在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

但是,如果您只需要按事件查询统计信息,则可以通过在每个事件中嵌入团队统计信息,而不是通过另一个集合将事件和团队关联起来,从而使此文档更加友好


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

这可能会帮助您

一场比赛是两队之间的一场比赛吗?啊,很抱歉花了这么长时间才回复你。为什么在我告诉他时,他不给我发一封关于回复的电子邮件?哈哈,我不知道你是什么意思?我最终只是把球队植入了比赛中。这对应用程序来说是最有意义的…如果你知道你想要什么在传统的RDBMS中工作,那么你为什么要首先使用Mongo?是的,我只是在活动中嵌入了团队。这对应用程序来说最有意义,因为我只需要/想要通过event.ok查询统计数据。如果您在团队中有很多字段,并且它们参与多个事件,您可以通过仍然有一个团队集合,但在事件中嵌入一个TeamStats模型来对其进行规范化。TeamStat模型可以有一个“属于团队”(团队id),因此您仍然可以在统计页面上检索所有团队信息。如果你从来没有接触过比赛之外的球队,那么像你现在这样保持平放可能会更快。