Javascript Sequelize:更改嵌套数据结构

Javascript Sequelize:更改嵌套数据结构,javascript,object,orm,nested,sequelize.js,Javascript,Object,Orm,Nested,Sequelize.js,我想更改orm查询返回的数据结构。总共有四张桌子产品,类别是多对多关系,有一个充当桥梁的产品_类别表,共有四个表,包括部门表。协会成员如下: "data": [ { "category_id": 1, "category_name": "French", "department": { "department_id": 1, "department_name": "Regional"

我想更改orm查询返回的数据结构。总共有四张桌子<代码>产品,
类别
是多对多关系,有一个充当桥梁的
产品_类别
表,共有四个表,包括
部门
表。协会成员如下:

"data": [
    {
        "category_id": 1,
        "category_name": "French",
        "department": {
            "department_id": 1,
            "department_name": "Regional"
        },
        "product_category": {
            "product_id": 1,
            "category_id": 1
        }
    }
]
"data": [
    {
         "category_id": 1,
         "category_name": "French",
         "department_id": 1,
         "department_name": "Regional"
    }
]
//产品
产品类别(型号、类别、{
通过:“产品类别”,
foreignKey:“产品标识”
});
//产品类别
产品类别属于(型号、产品、{
foreignKey:“产品标识”
});
产品类别属于(型号类别、{
foreignKey:“类别\u id”
});
//类别
类别。属于以下类别(型号、产品、{
通过:“产品类别”,
foreignKey:“类别\u id”
});
类别归属于(车型部、{
外键:“部门id”
});
//系
部门。有许多(型号。类别{
外键:“部门id”
});
通过上面的表结构,获得以下查询,以获得部门id所对应的产品:

const query=wait product.findOne({
其中:{product_id:id},
包括:{
型号:类别,
属性:['category_id',['name','category_name'],
包括:{
型号:部门,,
属性:['department_id',['name','department_name']]
}
},
属性:[]
});
const data=query.categories;
生成的json数据如下所示:

"data": [
    {
        "category_id": 1,
        "category_name": "French",
        "department": {
            "department_id": 1,
            "department_name": "Regional"
        },
        "product_category": {
            "product_id": 1,
            "category_id": 1
        }
    }
]
"data": [
    {
         "category_id": 1,
         "category_name": "French",
         "department_id": 1,
         "department_name": "Regional"
    }
]
我想把上述数据做如下:

"data": [
    {
        "category_id": 1,
        "category_name": "French",
        "department": {
            "department_id": 1,
            "department_name": "Regional"
        },
        "product_category": {
            "product_id": 1,
            "category_id": 1
        }
    }
]
"data": [
    {
         "category_id": 1,
         "category_name": "French",
         "department_id": 1,
         "department_name": "Regional"
    }
]
为了按上述方式处理数据,有两种方法可以修改基于sql的orm查询,以及在javascript中处理
产品
值。
但是,由于我是通过orm学习sql的,所以我不知道第一种方法,所以我决定将其用作第二种方法


第一次尝试 我试了两次。请注意,框架使用KOA.JS。第一个是:

"data": [
    {
        "category_id": 1,
        "category_name": "French",
        "department": {
            "department_id": 1,
            "department_name": "Regional"
        },
        "product_category": {
            "product_id": 1,
            "category_id": 1
        }
    }
]
"data": [
    {
         "category_id": 1,
         "category_name": "French",
         "department_id": 1,
         "department_name": "Regional"
    }
]
const query=wait product.findOne({
其中:{product_id:id},
包括:{
型号:类别,
属性:['category_id',['name','category_name'],
包括:{
型号:部门,,
属性:['department_id',['name','department_name']]
}
},
属性:[]
});
const data=query.categories.map(
({类别id,类别名称,部门})=>({
类别识别码,
类别名称,
部门id:department.department\u id,
部门名称:department.department\u name
})
);
ctx.body=数据;
正文如下:

"data": [
    {
        "category_id": 1,
        "department_id": 1
    }
]
。。??有点奇怪,所以我稍微更改了返回值:

({category\u id,category\u name,department})=>({
//类别识别码,
//类别名称,
部门id:department.department\u id,
部门名称:department.department\u name
})
json值输出为:

"data": [
    {
        "department_id": 1
    }
]
相反,您注释了
部门id
部门名称

({category\u id,category\u name,department})=>({
类别识别码,
类别名称,
//部门id:department.department\u id,
//部门名称:department.department\u name
})
结果json值为:

"data": [
    {
        "category_id": 1
    }
]
我没有别的办法

第二次尝试
等待产品
芬顿先生({
其中:{product_id:id},
包括:{
型号:类别,
属性:['category_id',['name','category_name'],
包括:{
型号:部门,,
属性:['department_id',['name','department_name']]
}
},
属性:[]
})
。然后(查询=>{
const data=query.categories.map(
({类别id,类别名称,部门})=>({
类别识别码,
类别名称,
部门id:department.department\u id,
部门名称:department.department\u name
})
);
ctx.body=数据;
});
两种方法都有相同的结果,所以我不知道该怎么办


因此,我将变量映射到带有json数据的嵌套数组。我得到了我想要的结果:

const数据={
类别:[
{
类别识别号:1,
类别名称:“法语”,
部门:{部门id:1,部门名称:'地区'},
产品类别:{product\u id:1,category\u id:1}
}
]
};
const product=data.categories.map(
({类别id,类别名称,部门})=>({
类别识别码,
类别名称,
部门id:department.department\u id,
部门名称:department.department\u name
})
);
控制台日志(产品);
//[{类别编号:1,
//类别名称:“法语”,
//部门编号:1,
//部门名称:'地区'}]
所以我很困惑。如何处理sequelize查询中的数据?我非常感谢你的帮助


如果解决问题的方法是错误的,或者您需要一个模型模式,请告诉我。

我以一种简单的方式实现了它。它看起来像一个完整的胃。如果另一个人能给出最好的答案,那就太好了

const getProduct=()=>{
常量a=query.categories[0];
常量b=a.get({plain:true});
const{category_id,category_name}=b;
const{department\u id,department\u name}=b.department;
返回{
类别识别码,
类别名称,
部门id,
部门名称
};
};
ctx.body=getProduct();
Json数据输出:

"product": {
    "category_id": 1,
    "category_name": "French",
    "department_id": 1,
    "department_name": "Regional"
}

如果运行
console.log()
,sequelize查询将像
dataValues:{}、(…)
一样打印出来。如果这样做,您将无法处理数据。因此,关键点是在包含查询的变量之后处理数据,如下所示:

"data": [
    {
        "category_id": 1,
        "category_name": "French",
        "department": {
            "department_id": 1,
            "department_name": "Regional"
        },
        "product_category": {
            "product_id": 1,
            "category_id": 1
        }
    }
]
"data": [
    {
         "category_id": 1,
         "category_name": "French",
         "department_id": 1,
         "department_name": "Regional"
    }
]
data.get({plain:true})