Ruby on rails 基于MongoDB和Rails的比赛数据建模

Ruby on rails 基于MongoDB和Rails的比赛数据建模,ruby-on-rails,mongodb,mongoid,Ruby On Rails,Mongodb,Mongoid,我正在用ROR、MongoDB和Mongoid开发一个应用程序 我的应用程序有两种模式:team和match。模型match有两个文档客场和主场。我的问题是:如何处理团队和匹配之间的关系 我是否应该使用has\u和\u属于\u many 谢谢。为什么不尝试将这两个团队作为嵌入文档 例如,您可以这样做: class Match include Mongoid::Document embeds_one :away_team, :class_name => "Team" embeds

我正在用ROR、MongoDB和Mongoid开发一个应用程序

我的应用程序有两种模式:
team
match
。模型
match
有两个文档
客场
主场
。我的问题是:如何处理
团队
匹配
之间的关系

我是否应该使用has\u和\u属于\u many


谢谢。

为什么不尝试将这两个团队作为嵌入文档

例如,您可以这样做:

class Match
  include Mongoid::Document
  embeds_one :away_team, :class_name => "Team"
  embeds_one :home_team, :class_name => "Team"
end


class Team
  include Mongoid::Document
  field :name, type: String
  embedded_in :match
end
> m = Match.new
> t = Team.new
> m.away_team = t
> m.away_team.name = "yankees"
> m.save
> t = Team.new
> m.home_team = t
> m.home_team.name = "blue jays"
> m.save
然后您可以像这样创建匹配:

class Match
  include Mongoid::Document
  embeds_one :away_team, :class_name => "Team"
  embeds_one :home_team, :class_name => "Team"
end


class Team
  include Mongoid::Document
  field :name, type: String
  embedded_in :match
end
> m = Match.new
> t = Team.new
> m.away_team = t
> m.away_team.name = "yankees"
> m.save
> t = Team.new
> m.home_team = t
> m.home_team.name = "blue jays"
> m.save
您的文档将如下所示

> db.matches.find().pretty()
{
    "_id" : ObjectId("503d2e123005c811cc000001"),
    "away_team" : {
        "_id" : ObjectId("503d2e143005c811cc000002"),
        "name" : "yankees"
    },
    "home_team" : {
        "_id" : ObjectId("503d2e303005c811cc000003"),
        "name" : "blue jays"
    }
}

为什么不尝试将这两个团队作为嵌入文档

例如,您可以这样做:

class Match
  include Mongoid::Document
  embeds_one :away_team, :class_name => "Team"
  embeds_one :home_team, :class_name => "Team"
end


class Team
  include Mongoid::Document
  field :name, type: String
  embedded_in :match
end
> m = Match.new
> t = Team.new
> m.away_team = t
> m.away_team.name = "yankees"
> m.save
> t = Team.new
> m.home_team = t
> m.home_team.name = "blue jays"
> m.save
然后您可以像这样创建匹配:

class Match
  include Mongoid::Document
  embeds_one :away_team, :class_name => "Team"
  embeds_one :home_team, :class_name => "Team"
end


class Team
  include Mongoid::Document
  field :name, type: String
  embedded_in :match
end
> m = Match.new
> t = Team.new
> m.away_team = t
> m.away_team.name = "yankees"
> m.save
> t = Team.new
> m.home_team = t
> m.home_team.name = "blue jays"
> m.save
您的文档将如下所示

> db.matches.find().pretty()
{
    "_id" : ObjectId("503d2e123005c811cc000001"),
    "away_team" : {
        "_id" : ObjectId("503d2e143005c811cc000002"),
        "name" : "yankees"
    },
    "home_team" : {
        "_id" : ObjectId("503d2e303005c811cc000003"),
        "name" : "blue jays"
    }
}

@Emily的解决方案是可行的,但是如果您打算直接为团队查询大量内容,这将很麻烦,因为您正在查询嵌入的文档,最好将它们作为根文档

这里有一个非常类似的帖子


如果这对你不起作用,我碰巧也有球队和比赛:)。我所做的是,因为团队ID在我的例子中是静态的,所以我有两个主客场团队字段,索引它们,并使用它们来查询我需要的团队。也许不是最好的解决方案,但它是有效的。

@Emily的解决方案是可行的,但是如果您打算直接为团队查询很多内容,这将很麻烦,因为您正在查询嵌入的文档,最好将它们作为根文档

这里有一个非常类似的帖子


如果这对你不起作用,我碰巧也有球队和比赛:)。我所做的是,因为团队ID在我的例子中是静态的,所以我有两个主客场团队字段,索引它们,并使用它们来查询我需要的团队。也许不是最好的解决方案,但它很有效。

我同意这一点-你也可以让主客场球队链接到球队集合中的顶级文档。这完全取决于您希望如何访问该数据。如果你永远不会在比赛环境之外访问球队的数据,你可以使用嵌入式文档。我同意这一点-你也可以让主客场球队链接到球队集合中的顶级文档。这完全取决于您希望如何访问该数据。如果您永远无法访问比赛上下文之外的团队数据,则可以使用嵌入式文档。