sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoEngine:EmbeddedDocument v/s. Referensfält

Svaret på detta beror verkligen på vad du tänker göra med den data du lagrar i mongodb. Det är viktigt att komma ihåg att ett ReferenceField pekar på ett dokument i en annan samling i mongodb, medan ett EmbeddedDocument lagras i samma dokument i samma samling.

Tänk på det här schemat:

Person
    -> name
    -> address

Address
    -> street
    -> city
    -> country

Om du förväntar dig att varje person bara ska ha en adress och att varje adress bara ska vara associerad med en person (en en-till-en-relation) och du i allmänhet kommer att fråga databasen efter en eller flera Person dokument ska fältet Person.address vara EmbeddedDocumentField .

Om du förväntar dig att varje person ska ha mer än en adress men varje adress bara kommer att vara kopplad till en person (en en-till-många-relation) och du fortfarande huvudsakligen kommer att fråga efter en person så kan du använda ett EmbeddedDocumentListField .

Om du förväntar dig att varje person ska ha mer än en adress och varje adress kommer att associeras med många personer (en många-till-många-relation) bör du förmodligen använda ReferenceField .

Men även om du är en-till-en eller en-till-många, om Adress är en del av din datamodell som är av intresse så kan det vara fördelaktigt att ha den lagrad i sin egen samling eftersom det gör aggregering och indexering enklare.

En annan punkt att tänka på är att om du inte vänder det av mongoengine kommer att avreferera varje ReferenceField när du hämtar ett dokument - detta kan leda till prestationspåföljder med massor av ReferenceField eller referenser till mycket stora dokument.



  1. Hur man gör korrekt databastestning (TDD) på Rails 3 med MongoDB och Mongoid

  2. Kan Meteor korrekt hantera data som uppdateras externt direkt till MongoDB-databasen?

  3. Mongoose returnerar [Objekt] istället för det faktiska inbäddade dokumentet

  4. beräkna frekvens med hjälp av mongodb aggregerade ramverk