2015-04-01 66 views
1

我有一個名爲countryjobSchema這是一個必需的字符串。什麼是處理國家作爲財產對貓鼬(mongodb)的理想方式

基本上只是得到ISO-2字母代碼(即:美國,新西蘭或其他)...這就是保存在數據庫中的對象的country屬性。

但是,我在文件系統上有一個包含全名(即:美國)和經緯度座標的對象的countries.json文件。

{ 
    "name": "United States", 
    "iso2": "US", 
    "lat": "37.09024", 
    "lng": "-95.712891" 
} 

我真的不需要任何crud界面。所以我在數據庫之外構建了一個API,將「US」字符串從數據庫映射到文件對象。

但是,這證明是一個PITA。

什麼是處理這個問題的好方法?

我應該只將這個完整的國家對象存儲在數據庫中,並把它留在那?這似乎是最簡單的路線,除了國家定義更改之外,那麼我將把所有這些陳舊的數據散佈在我的mongo數據庫中,無論此數據保存在何處。

回答

1

考慮貓鼬Population

人口是與來自其它集合(一個或多個)文件(一個或多個)文件中自動替換指定 路徑的過程。

你可以通過修改該國對象的"iso2"屬性的_id(因爲ISO代碼是每個國家是唯一的)開始,並保存修改的對象在你的數據庫。接下來是爲它創建一個新的Mongoose模式,您可以在jobSchema中引用它。例如:

var mongoose = require('mongoose') 
    , Schema = mongoose.Schema 

// Job Schema 
var jobSchema = Schema({ 
    name : String, 
    country : { type: String, ref: 'Country' } // To be populated 
}); 

var countrySchema = Schema({ 
    _id : String, 
    name : String,  
    lat : Number, 
    lng : Number 
}); 

var Country = mongoose.model('Country', countrySchema); 
var Job  = mongoose.model('Job', jobSchema); 

ref選項就是告訴貓鼬種羣期間使用哪種模式,你的情況Country模型。 Job型號的country屬性被聲明爲String,與countrySchema中使用的_id類型相同。將_id的類型與ref的類型匹配非常重要。

要了解人口工作,只是呼籲Job模型查詢填入方法,你會得到填充在文檔中的國家領域:

Job.find().populate('country').exec(function (error, jobs) { 
    // ... 
});