0

ROR、MongoDB、Mongoid を使用してアプリケーションを開発しています。

私のアプリケーションには と の 2 つのモデルがteamありmatchます。モデルmatchには と の 2 つのドキュメントがaway_homeありhome_teamます。私の質問は次のとおりです。 と の関係をどのように作成しteamsますmatchか?

使用する必要がありますhas_and_belongs_to_manyか?

ありがとう。

4

2 に答える 2

3

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"
    }
}
于 2012-08-28T20:51:36.443 に答える
3

@Emily S ソリューションは機能しますが、チームに対して直接多くのクエリを実行する場合は、埋め込みドキュメントをクエリしているため面倒であり、それらをルート ドキュメントとして使用することをお勧めします。

ここに SO に関する非常によく似た投稿がありますMongoid - 同じ外部フィールドの2つのフィールド逆

それがうまくいかない場合は、たまたまチームと試合もあります:)。私の場合、チーム ID は静的であるため、ホーム チームとアウェー チーム用に 2 つのフィールドがあり、それらにインデックスを付け、それらを使用して必要なチームを照会します。最善の解決策ではないかもしれませんが、うまくいきます。

于 2012-08-28T23:12:08.010 に答える