2016-04-24 38 views
0

我想在我的新項目中使用mongodb。這是第一次,即時通訊使用mongodb。在關係數據庫中我是節約像DATAS:使用mongoose和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... 

在這種模式我可以找到一個城市的國家,一個用戶的國家,等等。通過使用外鍵。

您建議如何以nodejs w/mongodb的最佳性能創建這樣的模式?

回答

1

當您創建模式時,仍然可以使用外鍵。請檢查這個模式作爲你給出的例子。

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); 

當您獲取數據時,您必須使用'填充'方法。例如:

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

Btw。 _id s是由mongo爲每個數據自動創建的。所以你不需要在模式中添加id字段。希望能幫助到你。祝你好運

+0

我讀過一些文章,他們說它會降低性能?這是真的嗎? – KadirCanerErgun

+0

這取決於如何使用它。如果您只將國家/地區名稱存儲在您的架構中,並且您沒有使用國家/地區架構,則不需要使用參考ID。您可以簡單地將子文檔添加到您的模式中。像新的Schema({country:{name:String,code:Number}})或者只是新的Schema({country:String})。在這種情況下,不需要使用'refId'。它降低了性能。此外,你可能已經閱讀了一些舊的文件。由於mongo一直在廣泛使用,它已經發展了很多。所以,你不需要擔心人們認爲mongo舞臺上的表現。 –