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