sql >> Databáze >  >> NoSQL >> MongoDB

MongoEngine:EmbeddedDocument v/s. ReferenceField

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.



  1. mongoDB/mongoose:jedinečný, pokud není null

  2. Balíček Accounts-Base nelze získat tak, aby ukazoval na správnou databázi

  3. Připojte se k AWS ElastiCache pomocí In-Transit Encryption

  4. Co je návratový typ db.collection.find() v mongodb