0

次のような文書レイアウトがあります。

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 }
                             ]
                }
                  ]
            }

ただし、その「第3」レベルでドキュメントを追加/変更/削除する方法がわかりません。それは可能ですか、それとも良いデザインですか?すべてのデータを 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}
        }

どんな考えでも素晴らしいでしょう!

4

1 に答える 1

1

はい、そのようなネストを持つようにデータを確実に構造化できます。さらに、それを達成するために特別なことをする必要は絶対にありません(少なくともpymongoを使用して)。既存のドキュメントを更新する必要がある場合は、更新カーソルを使用してドキュメントを取得します。それが問題である場合は、

少なくとも、あなたの最初のアイデアについては。スキーマの2番目のアイデアは、そのデータを構造化するための優れた方法ではありません。1つは、キーで文字列照合を行わずにプログラムドキュメントのサブセットを簡単に反復することは不可能であり、コストがかかることです。

そうは言っても、私は現在いくつかの主要なMongoDBパフォーマンスの問題に取り組んでいるので、ファイルアセットを別のコレクションに保持することをお勧めします。このデータセットを大きくすることを計画している場合は、後でスケーリングするのが簡単になります。

于 2012-04-23T05:12:55.823 に答える