我在 jobSchema
上有一个名为 country
的属性,它是必需的字符串。
基本上只是获取 iso-2 字母代码(即:US、NZ 或其他)...这就是对象的 country
属性在数据库中保存的内容。
但是,我的文件系统上有一个country.json 文件,其中包含一个包含全名(即:美国)和纬度/经度坐标的对象。
{
"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
,与中使用的 _id
类型相同。 国家架构
。将 _id
的类型与 ref
的类型相匹配非常重要。
要了解填充的工作原理,只需调用 Job
模型查询上的 populate 方法,您将在填充的文档中获得国家/地区字段:
Job.find().populate('country').exec(function (error, jobs) {
// ...
});
关于node.js - 将国家作为 Mongoose (mongodb)对象的属性来处理的理想方式是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29386646/