sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoEngine:EmbeddedDocument v/s. Referencefelt

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.



  1. Opdatering i forEach på mongodb shell

  2. Installation af Apache CouchDB på Debian 9

  3. mongodb åben forbindelse problem

  4. Ingen Json-deserializer fundet for typen Option[reactivemongo.bson.BSONObjectID]