2012-08-28 6 views
0

ROR, MongoDB 및 Mongoid로 애플리케이션을 개발 중입니다.MongoDB 및 Rails로 토너먼트 데이터 모델링

내 응용에는 teammatch의 두 가지 모델이 있습니다. 모델 match에는 두 개의 문서 away_homehome_team이 있습니다. 내 질문은 : teamsmatch 사이의 관계를 어떻게 만듭니 까?

has_and_belongs_to_many을 사용해야합니까?

감사합니다.

답변

3
과 같을 것이다

@Emily S 솔루션이 효과적 일지 모르지만 팀에 직접 문의하는 경우 문제가 될 것입니다. 일부는 임베디드 문서를 쿼리 할 때 루트 문서로 사용하는 것이 좋습니다.

, 나는 :) 또한 팀과 경기를하는 일이 SO 여기 Mongoid - two fields inverses of the same foreign field

이 당신을 위해 작동하지 않는 경우에 매우 유사한 게시물이 있습니다. 필자의 경우 팀 ID는 정적이기 때문에 홈 팀과 원정 팀을위한 두 개의 필드가 있으며 인덱스를 작성하여 필요한 팀을 쿼리하는 데 사용합니다. 어쩌면 최선의 해결책은 아니지만 작동합니다.

+1

동의합니다. 집과 떨어져있는 팀이 팀 콜렉션의 최상위 문서에 대한 링크가 될 수도 있습니다. 그것은 모두 당신이 어떻게 그 데이터에 접근하기를 원하는가에 달려있다. 성냥 컨텍스트 외부에서 팀의 데이터에 액세스하지 않으면 포함 된 문서를 사용할 수 있습니다. –

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" 
    } 
} 
+0

감사합니다. @Emily S 예도 효과가있었습니다. –