2015-04-01 30 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) { 
    // ... 
});