Odpověď na to opravdu závisí na tom, co zamýšlíte udělat s daty, která ukládáte v mongodb. Je důležité si uvědomit, že ReferenceField
bude ukazovat na dokument v jiné kolekci v mongodb, zatímco EmbeddedDocument
je uložen ve stejném dokumentu ve stejné kolekci.
Zvažte toto schéma:
Person
-> name
-> address
Address
-> street
-> city
-> country
Pokud očekáváte, že každá osoba bude mít pouze jednu adresu a každá adresa bude spojena pouze s jednou osobou (vztah jedna ku jedné) a obecně budete v databázi dotazovat jednu nebo více osob
dokumenty, pak by pole Person.address mělo být EmbeddedDocumentField
.
Pokud očekáváte, že každá osoba bude mít více než jednu adresu, ale každá adresa bude spojena pouze s jednou osobou (vztah jeden k mnoha) a stále se budete převážně dotazovat na osobu, můžete použít EmbeddedDocumentListField .
Pokud očekáváte, že každá osoba bude mít více než jednu adresu a každá adresa bude spojena s mnoha lidmi (vztah mnoho k mnoha), pravděpodobně byste měli použít ReferenceField
.
Nicméně, i když jste jeden ku jednomu nebo jeden k mnoha, pokud Adresa
je součástí vašeho datového modelu, který je zajímavý, pak může být výhodné mít jej uložený ve vlastní kolekci, protože to usnadňuje agregaci a indexování.
Dalším bodem, který je třeba zvážit, je, že pokud jej neotočíte vypnuto
mongoengine zruší reference každé ReferenceField
když načtete dokument – to může způsobit snížení výkonu se spoustou ReferenceField
nebo odkazy na velmi rozsáhlé dokumenty.