2017-08-18 17 views
0

MongoDbでのドキュメント参照は推奨されていますか、埋め込みドキュメントは正しい方法ですか?私の質問は次の文脈の中で来ます。MongoDbとC#:埋め込みまたは参照ドキュメント

class ObjectType1 
{ 
ObjectId ID; 
ObjectType2 Type2Element; 
} 

class ObjectType2 
{ 
ObjectId ID; 
} 

は、私たちはファーストクラスでObjectType2要素を参照するためにMongoDBRefを使用することができます理解し、しかし、私は(間違った場所/名前空間で探していてもよく、公式のMongoDB C#のドライバを使用しています)FetchDBRefAs方法を見つけることができませんでした。

MongoDbで必要な場合、特にC#を使用してエンティティをリンクするには、どのような方法が推奨されますか? ありがとう

+0

を*あなたがいることを読んでどこ私は知りませんが、それは古いソースでなければなりませんか非常にインフォームドコンセント。 'DBRef'を使わないでください。参照をしたい場合は、ローカルのキーと外部キーのために優先的に 'ObjectId'の値を使用し、代わりに「あなたのアプリケーションロジックの代わりに」を指すモデルを定義します。 'DBRef'は公式な非推奨通知なしで廃止予定のコンセプトに近いものです。現代の多くの業務ではサポートされておらず、照会の一般的な妨げになっています。 –

+0

「埋め込み対参照」の選択は実際には意見に基づいており、唯一の実際の解決策は、実際のアプリケーションの使用パターンと要件に完全に基づいており、どのような形でも主題に関する人々の意見に左右されるべきではありません。なぜ「どちらか一方」を使用する理由をよりよく理解するには、[MongoDB relationships:embed or reference?](https://stackoverflow.com/q/5373198/2313887)または[Mongoose populate vs object nesting](https://stackoverflow.com/q/24096546/2313887)。後者は基本的に意図と基本的に関連しています –

+0

ありがとう@NeilLunn –

答えて

1

まもなくご質問にお答えしてください:あなたのユースケースによって異なります。

私は、私は私自身のDBスキーマ設計する際に従うことのようないくつかのルール:あなたのコードでは、あなたがObjectType1とObjectType2の両方を必要とする場合は、同時に

  • が、私はあなただけ必要なので、あなたが埋め込まれたアプローチを使用することをお勧め1クエリーを実行してCRUDを実行します。さらに、必要な情報はすべて同じ場所にあるので、より論理的です。

  • ほとんどの場合、ObjectType2だけが必要な場合は、2つのコレクションで分けてください。

公式ドキュメントのこの部分は、たくさんのより多くの情報があります:「私たちはMongoDBRefを使用することができます理解して」* https://docs.mongodb.com/manual/core/data-modeling-introduction/

+0

MongoDBRefをお勧めしますか、ドキュメントが分離されている場合はObjectIdを使用しますか? –

+0

私がモンゴーを学んだとき、私はこのポストに来ました。 https://stackoverflow.com/questions/9412341/mongodb-is-dbref-necessary。人々の多くが避けなければならないと言われるように、私はDBRefを決して使用しませんでした。 – BOR4

関連する問題