我正在使用 ROR、MongoDB 和 Mongoid 开发一个应用程序。
我的应用程序有两个模型:team
和match
. 该模型match
有两个文档away_home
和home_team
. 我的问题是:我如何建立和之间的teams
关系match
?
我应该使用has_and_belongs_to_many
吗?
谢谢。
我正在使用 ROR、MongoDB 和 Mongoid 开发一个应用程序。
我的应用程序有两个模型:team
和match
. 该模型match
有两个文档away_home
和home_team
. 我的问题是:我如何建立和之间的teams
关系match
?
我应该使用has_and_belongs_to_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
您的文档将如下所示
> db.matches.find().pretty()
{
"_id" : ObjectId("503d2e123005c811cc000001"),
"away_team" : {
"_id" : ObjectId("503d2e143005c811cc000002"),
"name" : "yankees"
},
"home_team" : {
"_id" : ObjectId("503d2e303005c811cc000003"),
"name" : "blue jays"
}
}
@Emily S 解决方案可以工作,但是如果您打算直接为团队查询很多内容,那将会很麻烦,因为您正在查询嵌入式文档,最好将它们作为根文档。
这里有一篇关于 SO 的非常相似的帖子Mongoid - 同一个外国字段的两个字段逆
如果这对你不起作用,我碰巧也有球队和比赛:)。我所做的,因为在我的情况下,团队 ID 是静态的,我有两个字段用于主队和客队,索引它们,并使用它们来查询我需要的团队。也许不是最好的解决方案,但它确实有效。