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

what's the ideal way to deal with countries as a property on an object in mongoose (mongodb)

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

基本上只是获取 iso-2 字母代码(即:美国、新西兰或其他)...这就是为对象的 country 属性.

但是我在文件系统上有一个 countries.json 文件,其中包含一个包含全名(即:美国)和 lat/long 坐标的对象。

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

我真的不需要任何 crud 界面。所以我在数据库外部构建了一个 API 来将 "US" 字符串从数据库映射到文件对象。

然而,事实证明这有点像 PITA。

有什么好的处理方法?

我是否应该将这个完整的国家/地区对象存储在数据库中并将其保留在那里?这似乎是最简单的方法,除了更改国家/地区定义之外,然后我会将所有这些陈旧数据散落在我的 mongo 数据库中,无论这些数据保存在哪里。

考虑 Mongoose Population:

Population is the process of automatically replacing the specified paths in the document with document(s) from other collection(s).

您可以首先将此国家/地区对象的 "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 选项告诉 Mongoose 在填充期间使用哪个模型,在您的情况下是 Country 模型。 Job 模型的 country 属性 声明为 String,与 countrySchema 中使用的 _id 类型相同。将 _id 的类型与 ref 的类型相匹配很重要。

要查看填充的工作原理,只需在 Job 模型查询上调用填充方法,您将在填充的文档中获取国家/地区字段:

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