Ruby on rails 基于MongoDB和Rails的比赛数据建模
我正在用ROR、MongoDB和Mongoid开发一个应用程序 我的应用程序有两种模式: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
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在我的例子中是静态的,所以我有两个主客场团队字段,索引它们,并使用它们来查询我需要的团队。也许不是最好的解决方案,但它很有效。我同意这一点-你也可以让主客场球队链接到球队集合中的顶级文档。这完全取决于您希望如何访问该数据。如果你永远不会在比赛环境之外访问球队的数据,你可以使用嵌入式文档。我同意这一点-你也可以让主客场球队链接到球队集合中的顶级文档。这完全取决于您希望如何访问该数据。如果您永远无法访问比赛上下文之外的团队数据,则可以使用嵌入式文档。