ROR, MongoDB 및 Mongoid로 애플리케이션을 개발 중입니다.MongoDB 및 Rails로 토너먼트 데이터 모델링
내 응용에는 team
과 match
의 두 가지 모델이 있습니다. 모델 match
에는 두 개의 문서 away_home
과 home_team
이 있습니다. 내 질문은 : teams
과 match
사이의 관계를 어떻게 만듭니 까?
has_and_belongs_to_many
을 사용해야합니까?
감사합니다.
ROR, MongoDB 및 Mongoid로 애플리케이션을 개발 중입니다.MongoDB 및 Rails로 토너먼트 데이터 모델링
내 응용에는 team
과 match
의 두 가지 모델이 있습니다. 모델 match
에는 두 개의 문서 away_home
과 home_team
이 있습니다. 내 질문은 : teams
과 match
사이의 관계를 어떻게 만듭니 까?
has_and_belongs_to_many
을 사용해야합니까?
감사합니다.
@Emily S 솔루션이 효과적 일지 모르지만 팀에 직접 문의하는 경우 문제가 될 것입니다. 일부는 임베디드 문서를 쿼리 할 때 루트 문서로 사용하는 것이 좋습니다.
, 나는 :) 또한 팀과 경기를하는 일이 SO 여기 Mongoid - two fields inverses of the same foreign field
이 당신을 위해 작동하지 않는 경우에 매우 유사한 게시물이 있습니다. 필자의 경우 팀 ID는 정적이기 때문에 홈 팀과 원정 팀을위한 두 개의 필드가 있으며 인덱스를 작성하여 필요한 팀을 쿼리하는 데 사용합니다. 어쩌면 최선의 해결책은 아니지만 작동합니다.
왜 두 팀이 임베디드 문서로 사용하려고하지 않습니까?
예를 들어, 당신이 뭔가를 할 수 있습니다 :
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 예도 효과가있었습니다. –
동의합니다. 집과 떨어져있는 팀이 팀 콜렉션의 최상위 문서에 대한 링크가 될 수도 있습니다. 그것은 모두 당신이 어떻게 그 데이터에 접근하기를 원하는가에 달려있다. 성냥 컨텍스트 외부에서 팀의 데이터에 액세스하지 않으면 포함 된 문서를 사용할 수 있습니다. –