3

オブジェクトが複数の場所で使用されている場合の処理​​方法を考えています。次のコードが与えられた場合 (単なるサンプル コード):-

 public class Group
    {          
        public ObjectId Id { get; set; }
        public string Name { get; set; }
        public List<Person> People { get; set; }
        public List<Meeting> Meetings { get; set; }
    }

    public class Meeting
    {          
        public string Subject { get; set; }
        public List<Person> Attendees { get; set; }
    }

    public class Person
    {            
        public string Name { get; set; }
    }

グループを mongodb ドキュメントとして保存すると、すべてのユーザーと会議がシリアル化されます。ただし、同じ Person オブジェクトは、People List で、および会議の出席者として参照できます。ただし、シリアル化されると、それらは個別のオブジェクトになります。同じ "Person" オブジェクトが People リストと Meetings リストの両方にあるようにするにはどうすればよいですか?

または、これをモデル化するためのより良い方法はありますか? できることの1つは、「人」を別のドキュメントに入れて埋め込み/参照することですか? これにより、ますます個別のコレクションが作成され始めます。理想的には、単一のドキュメント内で参照を維持したいと考えています。

または、ドキュメント内で各人にIDを付け、1つのマスターリストを作成し、IDのリストのみを「会議」に保存し、何らかのヘルパーメソッドを使用してマスターリストからIDを解決する必要がありますか? できますが、少し醜いです。

4

1 に答える 1

2

私は MongoDB の専門家ではありませんが、このシナリオでは、目的の結果を得るには、これらの各アイテムを参照付きの個別のコレクションにする必要があると思います。

会議には、グループ ID と個人 ID 出席者のリストがあります。グループには、個人 ID メンバー (人) のリストがあります。個人が 1 つのグループにしか所属できない場合は、単一のグループ ID を持つことができます。

それらがデータベースに入ると、既存の設計で使用できる唯一のオプションは、名前の同等性をチェックすることです。これは、あなたが言うように実行できますが、正しいアプローチとは思えません。

基本的に、「グループ」と「会議」に「人」を保存する方法で埋め込み関係モデルを使用していますが、両方に同じ「人」オブジェクトが必要な場合は、出席者または両方に参照を使用する必要があります。これは、標準的な動作に対して「戦う」のではなく、私にとって最も簡単なアプローチのようです。

于 2013-08-12T01:55:33.830 に答える