これに対する答えは、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
でパフォーマンスが低下する可能性があります または非常に大きなドキュメントへの参照。