0

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

我的应用程序有两个模型:teammatch. 该模型match有两个文档away_homehome_team. 我的问题是:我如何建立和之间的teams关系match

我应该使用has_and_belongs_to_many吗?

谢谢。

4

2 回答 2

3

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

例如,您可以执行以下操作:

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"
    }
}
于 2012-08-28T20:51:36.443 回答
3

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

这里有一篇关于 SO 的非常相似的帖子Mongoid - 同一个外国字段的两个字段逆

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

于 2012-08-28T23:12:08.010 回答