在 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) {
// ...
});
我在 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) {
// ...
});