什么是处理国家作为对mongoose属性(mongodb)的理想方式?

我在jobSchema上有一个名为country的属性,它是必需的string。

基本上只是得到ISO-2字母代码(即:美国,新西兰或其他)…这就是保存在数据库中的对象的country属性。

然而,我有一个文件系统上的包含一个对象,包含全名(即:美国)和纬度/经度坐标的countries.json文件。

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

我真的不需要任何crud界面。 所以我已经在数据库之外build立了一个API来将“US”string从数据库映射到文件对象。

但是,这被certificate是一个PITA。

什么是处理这个问题的好方法?

我应该只是将这个完整的国家对象存储在数据库中,并留在那个? 这似乎是最简单的路线,除了一个国家定义的变化,那么我将所有这些陈旧的数据散落在我的mongo数据库,无论这个数据保存在哪里。

考虑mongoose种群

人口是使用其他集合中的文档自动replace文档中的指定path的过程。

你可以开始修改这个country对象的"iso2"属性为一个_id (因为iso代码对于每个国家都是唯一的),并将修改后的对象保存在你的数据库中。 接下来是为它创build一个新的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选项告诉Mongoose在人口中使用哪个模型,在你的情况下是Country模型。 Job模型的country属性声明为String ,与countrySchema使用的_id属于同一types。 将_id的types与ref的types进行匹配非常重要。

要查看人口的工作方式,只需在Job模型查询中调用填充方法,即可在填充的文档中获得国家/地区字段:

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