node.js - 将国家作为 Mongoose (mongodb)对象的属性来处理的理想方式是什么

标签 node.js mongodb mongoose

我在 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/

相关文章:

javascript - 当我尝试引用另一个模式的对象时,为什么 mongoose ref 对我不起作用?

javascript - template.data._id 在 Meteor 中做什么?

php - mongodb getLastError() php

mongodb - 查询 MongoDB GridFS?

node.js - 如果使用 knex 不存在,如何忽略列更新?

mysql - 通过在 SequelizeJS 中存储为二进制的 UUID 查找行

javascript - 未处理的PromiseRejection警告: TypeError: Assignment to constant variable

node.js - 将 socket.io 切换到端口 80 导致传输切换到 xhr 轮询

node.js - Nodejs 和 mongoose 中基于角色的登录

Mongoose 如何在对象中填充数据