2016-04-24 11 views
0

Ich möchte mongodb auf meinem neuen Projekt verwenden. Das ist das erste Mal, dass ich Mongodb benutze. In relationalen Datenbanken i sparte Daten wie:Store Land, Stadt und Benutzerinformationen mit mongoose und nodejs MongoDB

tbl_country > id,name,created_at,etc.. 
tbl_city > id,country_id,name,created_at,etc... 
tbl_user > id,name_surname,city_id,etc... 

In diesem Schema ich eine Stadt des Landes finden, ein Benutzer Land, etc ... über Verwendung von Fremdschlüsseln.

Welchen Weg schlagen Sie vor, um ein solches Schema in bester Leistung von nodejs w/mongodb zu erstellen?

Antwort

1

Sie können beim Erstellen von Schemas weiterhin Fremdschlüssel verwenden. Bitte überprüfen Sie diese Schemas als Beispiele, die Sie angegeben haben.

var CountrySchema = new Schema({ 
    name: String, 
    created_at: Date 
}); 

var CitySchema = new Schema({ 
    countryName: { type: mongoose.Schema.Types.ObjectId, ref: 'Country' }, 
    created_at: Date 
}); 

var UserSchema = new Schema({ 
    name_surname: String, 
    city: { type: mongoose.Schema.Types.ObjectId, ref: 'City' } 
}) 

mongoose.model('Country', CountrySchema); 
mongoose.model('City', CitySchema); 
mongoose.model('User', UserSchema); 

und wenn Sie Daten abrufen, müssen Sie die Methode 'populate' verwenden. Zum Beispiel:

City.find() 
populate('countryName', 'name') // It will bring only name field 
.exec(function(err, cities) { 
}) 

Btw. _id s werden automatisch von mongo für jede Daten erstellt. Sie müssen also kein ID-Feld zu Ihren Schemas hinzufügen. Ich hoffe es hilft. Viel Glück

+0

Ich lese einige Artikel, die sie sagt, dass es Performance verringert? Ist es wahr ? – KadirCanerErgun

+0

hängt davon ab, wie man es benutzt. Wenn Sie nur den Ländernamen in Ihrem Schema speichern und Ihr Länderschema nicht verwenden, müssen Sie die Referenz-ID nicht verwenden. Sie können Filialdokumente einfach in Ihr Schema einfügen. Wie neues Schema ({country: {name: String, code: Number}}) oder einfach neues Schema ({country: String}). In diesem Fall ist es nicht notwendig "refId" zu verwenden. Es verringert die Leistung. Außerdem könnten Sie einige Dokumente gelesen haben, die alt sind. Da Mongo weit verbreitet ist, hat es sich sehr entwickelt. Sie müssen sich also keine Sorgen um die Leistung machen, wie die Leute zu Beginn des Mongos gedacht haben. –