我在一个网站上工作,将从不同来源的一堆数据。这些源可能有很多相同的数据(有一些冗余),但json中的字段可能会各处不同。这些源代码都来自REST API,都是json。
我的问题是,如何使用mongoose模式映射这些不同的源?我希望它尽可能简单,就像某种类型的表,我只需要添加新源的字段名称,以及它在数据库中映射到的字段。我使用的是express/node。
下面是两个源代码的示例,以及我的模式规范。
例如:
第一个来源:
{
"address":"123 abc st"
}
第二个来源:
{
"addr":"123 abc st"
}
我的架构:
{
address:{
type: String,
required: true
}
发布于 2018-06-01 05:16:46
您可以只创建一个JSON文件来存储映射,并在存储对象时检索它。
例如,创建一个JSON文件mappings.json
{
"addr": "address",
"address": "address"
}
然后,如果该属性对应于映射的属性,则检查代码。
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文件,或者只为每个源创建一个单独的映射,如下所示:
{
"firstSource": {
"addr": "address
},
"secondSource": {
"address": "address"
}
}
只需检查您的输入数据来自哪个来源。
发布于 2018-06-01 00:21:25
通过使用model.discriminator()方法,您可以尝试在模式之间创建继承。查看Mongoose文档here。
https://stackoverflow.com/questions/50627083
复制相似问题