2011-10-28 19 views
2

ドメインモデルの特定の部分をリレーショナルとして表現する方が良い場合があります。私はMongoDBのdatabase referencesのセクションを読んで、外国のコレクションのさまざまな文書への$ ref参照のJSON配列を提供することで、複数の文書への参照を提供できることを理解しています。MongoDBのMongoDBRefで複数の外部ドキュメントを参照する

コード内に外部ドキュメントへの参照を追加した例は、単一のドキュメントのみであり、MongoDBRef型のパブリックプロパティを作成しています。私の意見では、このアプローチには多くの不必要なオーバーヘッドがありますが、複数のドキュメントへの参照を格納する方法を明確にしていません。

Mongoの外国語文書と一対多の関係を提供したい場合は、MongoDBRefオブジェクトを含むコレクションプロパティを提供する必要がありますか? C#コードの標準エンティティオブジェクトのコレクションに固執し、BongClassMapを使用してMongoドキュメントにマップすることは可能ですか?

以下は、私が現在持っているモデルを表す単純なクラスです。ドキュメントと参照を正しく保存しているようですが、MongoDBRefオブジェクトのパブリックコレクションを公開したり、Personクラスを使用するすべてのユーザーに新しいドキュメントを追加するオーバーヘッドを公開したりするのは好きではありません。

問題がある場合は、MongoDB 2.0とそのC#ドライバを使用しています。

// This is how my class currently looks 
public class Person 
{ 
    public string Name { get; set; } 
    public List<MongoDBRef> Vehicles { get; private set; } 

    public Person() 
    { 
     Vehicles = new List<MongoDBRef>(); 
    } 
} 

// This is what I want my class to look like 
public class Person 
{ 
    public string Name { get; set; } 
    public List<Vehicle> Vehicles { get; private set; } 

    public Person() 
    { 
     Vehicles = new List<Vehicle>(); 
    } 
} 

答えて

3

DBRefsは、既知のドキュメントタイプへの参照を格納する適切なツールではありません。代わりに、参照されたドキュメントの_id値をコレクションに保存してください。適切なマッピングライブラリ(C#についてはわかりませんが、pymongo、mongoose、morphiaなどのC#に相当)があれば、あなたが望むものを正確に行うことができます。

DBRefは、コンパイル時に参照を保存する必要があるドキュメント(たとえば、画像やテキストなどを保持する「コンテンツ」フィールドなど)がわからない場合にのみ使用してください。

+0

ありがとうございます。あなたは、C#の同等物は私が欲しいものをさせることができると言うとき、この機能の名前はありますか?私はC#ドライバのドキュメントを読んだことがありますが、これについて何も表示されていないので、私は何かを見落としていると思っています。 – senfo

+1

これは通常、ドライバの機能ではなく、率直に言って私はC3をスピードアップするつもりはありません。実際には、いくつかの異なるドライバと混同されているようですが、LINQをサポートするドライバはあまり多くありません。もしあなたがC#に固執しているのであれば、手作業で行うか、githubやgoogleのコードを早期に調べなければならないかもしれません。 –

+1

なぜドキュメントタイプがわかっているとDBRefsが適切でないのですか? –

関連する問題