sql >> Database >  >> NoSQL >> MongoDB

MongoEngine:EmbeddedDocument v/s. Referentieveld

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.



  1. Iets als een tag-cache en het opvragen om ze voor te stellen met Redis

  2. MongoEngine - Een andere gebruiker is al geverifieerd voor deze database. U moet eerst uitloggen

  3. Suggesties nodig voor het ontwerpen van artiestenaanbevelingen

  4. De zaak voor MongoDB gehashte indexen