首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为mongodb和mongoose映射具有不同字段名称的多个数据源(nodejs)

为mongodb和mongoose映射具有不同字段名称的多个数据源(nodejs)
EN

Stack Overflow用户
提问于 2018-05-31 22:48:31
回答 2查看 2.1K关注 0票数 1

我在一个网站上工作,将从不同来源的一堆数据。这些源可能有很多相同的数据(有一些冗余),但json中的字段可能会各处不同。这些源代码都来自REST API,都是json。

我的问题是,如何使用mongoose模式映射这些不同的源?我希望它尽可能简单,就像某种类型的表,我只需要添加新源的字段名称,以及它在数据库中映射到的字段。我使用的是express/node。

下面是两个源代码的示例,以及我的模式规范。

例如:

第一个来源:

代码语言:javascript
复制
{
    "address":"123 abc st"
}

第二个来源:

代码语言:javascript
复制
{
    "addr":"123 abc st"
}

我的架构:

代码语言:javascript
复制
{
    address:{
        type: String,
        required: true
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-01 05:16:46

您可以只创建一个JSON文件来存储映射,并在存储对象时检索它。

例如,创建一个JSON文件mappings.json

代码语言:javascript
复制
{
  "addr": "address",
  "address": "address"
}

然后,如果该属性对应于映射的属性,则检查代码。

代码语言:javascript
复制
let mappings = require('mappings.json');
let MyModel = require('models/myModel');

function createNewObjectFromInput (input, callback) {
   let options = {};
   for (let property in input) {
      if (input.hasOwnProperty(property) && mappings[property]) {
        options[mappings[property]] = input[property];
      }
   }
   let newObject = new MyModel(options);
   newObject.save(callback);
}

为了使可能存在属性冲突的多个源更加健壮,您可以为每个源创建这样的JSON文件,或者只为每个源创建一个单独的映射,如下所示:

代码语言:javascript
复制
{
  "firstSource": { 
    "addr": "address
  },
  "secondSource": {
    "address": "address"
  }
}

只需检查您的输入数据来自哪个来源。

票数 1
EN

Stack Overflow用户

发布于 2018-06-01 00:21:25

通过使用model.discriminator()方法,您可以尝试在模式之间创建继承。查看Mongoose文档here

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50627083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档