Svaret på dette afhænger virkelig af, hvad du agter at gøre med de data, du gemmer i mongodb. Det er vigtigt at huske, at et ReferenceField vil pege på et dokument i en anden samling i mongodb, hvorimod et EmbeddedDocument er gemt i det samme dokument i samme samling.
Overvej dette skema:
Person
-> name
-> address
Address
-> street
-> city
-> country
Hvis du forventer, at hver person kun har én adresse, og at hver adresse kun er knyttet til én person (et en-til-en-forhold), og du generelt vil forespørge databasen for en eller flere Personer dokumenter, skal feltet Person.address være EmbeddedDocumentField .
Hvis du forventer, at hver person har mere end én adresse, men hver adresse kun vil være knyttet til én person (et en-til-mange-forhold), og du stadig primært vil forespørge efter en person, kan du bruge et EmbeddedDocumentListField .
Hvis du forventer, at hver person har mere end én adresse, og hver adresse vil være forbundet med mange personer (et mange-til-mange forhold), bør du sandsynligvis bruge ReferenceField .
Men selvom du er en-til-en eller en-til-mange, hvis Adresse er en del af din datamodel, som er af interesse, så kan det være en fordel at have det gemt i sin egen samling, fordi det gør aggregering og indeksering nemmere.
Et andet punkt at overveje er, at medmindre du vender det slukket
mongoengine vil de-reference hvert ReferenceField når du henter et dokument - kan dette indføre ydeevnestraffe med masser af ReferenceField eller henvisninger til meget store dokumenter.