ROR、MongoDB、Mongoid を使用してアプリケーションを開発しています。
私のアプリケーションには と の 2 つのモデルがteam
ありmatch
ます。モデルmatch
には と の 2 つのドキュメントがaway_home
ありhome_team
ます。私の質問は次のとおりです。 と の関係をどのように作成しteams
ますmatch
か?
使用する必要がありますhas_and_belongs_to_many
か?
ありがとう。
ROR、MongoDB、Mongoid を使用してアプリケーションを開発しています。
私のアプリケーションには と の 2 つのモデルがteam
ありmatch
ます。モデルmatch
には と の 2 つのドキュメントがaway_home
ありhome_team
ます。私の質問は次のとおりです。 と の関係をどのように作成しteams
ますmatch
か?
使用する必要がありますhas_and_belongs_to_many
か?
ありがとう。
2 つのチームを埋め込みドキュメントにしてみませんか?
たとえば、次のようなことができます。
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 - 同じ外部フィールドの2つのフィールド逆
それがうまくいかない場合は、たまたまチームと試合もあります:)。私の場合、チーム ID は静的であるため、ホーム チームとアウェー チーム用に 2 つのフィールドがあり、それらにインデックスを付け、それらを使用して必要なチームを照会します。最善の解決策ではないかもしれませんが、うまくいきます。