2012-04-23 5 views
0

私はこのような文書のレイアウトを持っている:MongoDBに埋め込みドキュメントを構築する最も良い方法は何ですか?

Program = { 
    '_id':ObjectId('4321...'), 
    'Title':'The Title', 
    'Episodes':[ 
       { 
       'Ep_ID':'234122', # this is unique 
       'Title': 'Ep1', 
       'Duration':45.2 }, 
       'Ep_ID':'342343' # unique 
       'Title': 'Ep2', 
       'Duration':32.3 } 
       ] 
      } 

私がやりたい何がこのように、各エピソード内の他の埋め込まれたドキュメントである:

Program = { 
     '_id':ObjectId('4321...'), 
     'Title':'The Title', 
     'Episodes':[ 
       { 
       'Ep_ID':'234122' # this is unique 
       'Title': 'Ep1', 
       'Duration':45.2, 
       'FileAssets':[ 
          { 'FileName':'video1.mov', 'FileSize':2348579234 }, 
          { 'FileName':'video2.mov', 'FileSize':32343233 } 
          ] 
       }, 
       { 
       'Ep_ID':'342343' # unique 
       'Title': 'Ep2', 
       'Duration':32.3, 
       'FileAssets':[ 
          { 'FileName':'video1.mov', 'FileSize':12423773 }, 
          { 'FileName':'video2.mov', 'FileSize':456322 } 
          ] 
       } 
        ] 
      } 

しかし、私は把握することはできませんその「3rd」レベルでdocを追加する/ mod/delする方法。それは可能なのか、あるいは良いデザインですか?すべてのデータを1つの文書にまとめるのは大変好きですが、管理は複雑すぎるように見え始めています。

私が持っていたもう1つの考えは、キーとしてサブ文書に存在するユニークな値を使用することでした。私は私のサブ文書について考えてきましたが、それらはすべて一種のユニークな価値を持っています。だから私はこれを行うことができます:

Program = { 
     '_id':ObjectId('4321...'), 
     'Title':'The Title', 
     'Ep_ID_234122':{episode data}, 
     'Ep_ID_342343':{episode data}, 
     'FileAsset_BigRaid_Video1.mov':{'Ep_ID_234122', + other file asset data}, 
     'FileAsset_BigRaid_video2.mov':{'Ep_ID_234122', + other file asset data} 
     } 

すべての考えは素晴らしいでしょう!

答えて

1

はい、そのような種類のネストを持つようにデータを構造化することは間違いありません。さらに、少なくともpymongoを使って、それを達成するために何か特別な作業をする必要はありません。問題があれば、既存のドキュメントを更新する必要がある場合は、更新カーソルを使用してドキュメントを取得するだけです。

少なくとも、あなたの最初のアイデアのために。スキーマの2番目のアイデアは、そのデータを構造化するための素晴らしい方法ではありません。 1つは、キーの文字列のマッチングを行わずにプログラム文書のサブセットを簡単に反復することは不可能です。これは高価になります。

私は現在、いくつかの主要なMongoDBパフォーマンスの問題に取り組んでいると言います。だから、ファイル資産を別々のコレクションに保管することをお勧めします。このデータセットを大きくする予定がある場合は、後でスケーリングする方が簡単になります。

+0

ありがとう、ええ、構造は私の頭の中でやっている。良いポイントは、キーに一致する文字列です。私が今考えているのは、入れ子にすることですが、最大レベルは1つだけです。ですから、私は 'FileAssets'リストを作り、各ファイル資産のエピソードを参照することができます。私はそれがうまくいくと思う。それ以外の場合は別のコレクションに戻ります。あなたのフィードバックをありがとう。本当に役立つ – MFB

関連する問題