sql >> データベース >  >> NoSQL >> MongoDB

MongoEngine:EmbeddedDocument v/s。 ReferenceField

    これに対する答えは、mongodbに保存しているデータをどうするかによって異なります。 ReferenceField を覚えておくことが重要です EmbeddedDocument に対して、mongodbの別のコレクション内のドキュメントを指します。 同じコレクションの同じドキュメントに保存されます。

    このスキーマを検討してください:

    Person
        -> name
        -> address
    
    Address
        -> street
        -> city
        -> country
    

    すべての人が1つのアドレスしか持たず、各アドレスが1人の人にのみ関連付けられる(1対1の関係)と予想し、通常、データベースに1人以上の Personを照会する場合 ドキュメントの場合、Person.addressフィールドは EmbeddedDocumentFieldである必要があります 。

    すべての人が複数のアドレスを持つことを期待しているが、各アドレスは1人の人にのみ関連付けられ(1対多の関係)、主に人を照会する場合は、EmbeddedDocumentListField

    すべての人が複数のアドレスを持ち、各アドレスが多くの人に関連付けられる(多対多の関係)と予想される場合は、おそらく ReferenceFieldを使用する必要があります。 。

    ただし、1対1または1対多の場合でも、 Address は関心のあるデータモデルの一部であるため、集計とインデックス作成が容易になるため、独自のコレクションに保存しておくと便利な場合があります。

    考慮すべきもう1つのポイントは、回転させない限り、オフ mongoengineは、すべての ReferenceFieldを逆参照します ドキュメントを取得するとき-これにより、多くの ReferenceFieldでパフォーマンスが低下する可能性があります または非常に大きなドキュメントへの参照。



    1. RedisのAzureCache/DataCacheスタイルのリージョン

    2. Laravelでキャッシュファサードを使用しているときにRedisキーが表示されない

    3. Pymongoカーソル反復の代替

    4. Mongodbが存在しない場合にのみ挿入する方法(存在する場合は更新なし)?