Het antwoord hierop hangt echt af van wat u van plan bent te doen met de gegevens die u opslaat in mongodb. Het is belangrijk om te onthouden dat een ReferenceField
zal verwijzen naar een document in een andere collectie in mongodb, terwijl een EmbeddedDocument
wordt opgeslagen in hetzelfde document in dezelfde verzameling.
Overweeg dit schema:
Person
-> name
-> address
Address
-> street
-> city
-> country
Als u verwacht dat elke persoon slechts één adres heeft en dat elk adres slechts aan één persoon is gekoppeld (een één-op-één relatie) en u in het algemeen de database gaat doorzoeken op één of meer Personen
documenten moet het veld Person.address EmbeddedDocumentField
. zijn .
Als u verwacht dat elke persoon meer dan één adres heeft, maar elk adres zal slechts aan één persoon worden gekoppeld (een een-op-veel-relatie) en u zult nog steeds voornamelijk naar een persoon zoeken, dan kunt u een EmbeddedDocumentListField
.
Als u verwacht dat elke persoon meer dan één adres heeft en elk adres wordt geassocieerd met veel mensen (een veel-op-veel-relatie), moet u waarschijnlijk ReferenceField
gebruiken .
Maar zelfs als u een-op-een of een-op-veel bent, als het Adres
maakt deel uit van uw datamodel dat van belang is, dan kan het voordelig zijn om het in de eigen collectie op te slaan omdat het aggregatie en indexering gemakkelijker maakt.
Een ander punt om te overwegen is dat tenzij je het omdraait uit
mongoengine de-referentie elk ReferenceField
wanneer u een document ophaalt - dit kan leiden tot prestatiestraffen met veel ReferenceField
of verwijzingen naar zeer grote documenten.