2017-04-07 2 views
0

私はマネージャ/従業員関係をmongoDBデータベースに格納する必要があります。たとえば、これらは2つの異なるコレクションです。MongoDBアーキテクチャの子関係を保存するベストプラクティス?

マネージャー収集文書:

{ 
    id: 1, 
    name: "Bill Smith" 
} 

従業員のコレクションのドキュメント:私は一般的に、このようなドキュメント/ DB構成することにより、この関係を表示しようとする

{ 
    id: 1, 
    name: "Abe Smith", 
    managerId: 1 
}, 
{ 
    id: 2, 
    name: "Hank Smith", 
    managerId: 1 
} 

をしかし、私は多くの場合、人々はこの関係を格納見ますこのようにして:

方法2

マネージャー収集文書:

{ 
    id: 1, 
    name: "Bill Smith", 
    employees: [1, 2] 
} 

従業員のコレクション文書:私は第二の方法で参照

{ 
    id: 1, 
    name: "Abe Smith" 
}, 
{ 
    id: 2, 
    name: "Hank Smith" 
} 

欠点は、従業員がから削除された場合employees配列は同期の出る可能性があることですコレクションではありますが、配列ではありません。

誰かが2つの異なる方法の長所/短所を指摘できるかどうか、またMongoDBにこのような子関係を保存するためのベストプラクティスと一般に考えられているのであれば、私は興味がありますか?

+2

管理者が削除された場合の最初の方法と同じ同期の欠点。 2つ目の方法は、ドキュメント全体を更新するODMを使用している場合はあまり便利ではありません。同時更新では、employees配列内のいくつかの要素が失われる可能性があります。 $ push/$ pullの問題はありません。また、最初の方法は$ルックアップ集約の方が簡単です。第2の方法は、ある人に多くの管理者がいれば良いと思われる。経験則として、スキーマは問合せをサポートする必要があります。関係を反映するだけでなく、SQLのアプローチとは少し異なります。 –

+0

スキーマがクエリをサポートすべきであるという点に関しては、関係を反映するだけではありません。 –

答えて

2

MongoDBのブログ記事6 Rules of Thumb for MongoDB Schema Designには、このトピックに関する良い議論があり、賛否両論の多くが重視されています。

「mongodb embedding vs linking」を検索すると、多くの参考文献や意見が得られます。

0

mongoDBのベストプラクティスについての素晴らしい本があります。 あなたはこの本を読んで、最高のアイデアを得ることができます。

書籍タイトル:コメントとして クリスティーナ・チョードーロー

ことでMongoDBの開発ため50のヒントとコツ、方法#2を選択すると、強く、従業員の配列の大きさに関係している、どのくらいの頻度このフィールドを変更しますか?従業員の検索はどうですか?より多くのフィルタ。

すべての従業員がより簡単なデータタイプでマネージャに直接参照する方法#1をお勧めします。文字列/オブジェクト対配列

関連する問題