什么是处理国家作为对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) { // ... });