Javascript 在带有nodejs的JSON中显示一对多结果

Javascript 在带有nodejs的JSON中显示一对多结果,javascript,node.js,sqlite,Javascript,Node.js,Sqlite,你好,我有这个型号: 通道 -连载 -名字 -知识产权 装置 -uui -卖主 -名字 -gw_系列 其中网关有一个或多个设备 我需要在使用SQLITE3的nodejs中的rest/api中显示这样的结果: { serial: 123, name: Huawei, ip: 192.168.12.1, devices:[ { uuid: 888, vendor: Intel, name: mouse, }, { uuid: 999, vendor: Intel, name: ke

你好,我有这个型号: 通道 -连载 -名字 -知识产权

装置 -uui -卖主 -名字 -gw_系列

其中网关有一个或多个设备

我需要在使用SQLITE3的nodejs中的rest/api中显示这样的结果:

{
serial: 123,
name: Huawei,
ip: 192.168.12.1,
devices:[
{
 uuid: 888,
 vendor: Intel,
 name: mouse,  
},

{
 uuid: 999,
 vendor: Intel,
 name: keyboard,  
}

],
serial: 345,
name: Apple,
ip: 192.168.12.3,
devices:[
{
 uuid: 567,
 vendor: Intel,
 name: mouse,  
},

{
 uuid: 893,
 vendor: Intel,
 name: keyboard,  
}

]
}
我猜你在用。我没有用真实的数据库测试它,但我做了一些函数的模拟和演示

也许这就是你需要的:

const get\u group=async(db)=>{
返回新承诺((解决、拒绝)=>{
常量sql=`
选择序列号,
网关。名称为gw_名称,
uuid,
小贩,
设备名称
从网关
连接设备
在网关上。串行=gw_串行
`;
常量acc={};
db.each(sql,(错误,gw_dev)=>{
如果(错误)返回拒绝(错误);
acc[gw_dev.serial]=acc[gw_dev.serial]|{
序列号:gw_dev.serial,
名称:gw_dev.gw_name,
ip:gw_dev.ip,
设备:[]
};
acc[gw_dev.serial].devices.push({
uuid:gw_dev.uuid,
供应商:gw_开发供应商,
名称:gw_dev.name,
});
},(错误,行)=>错误?拒绝(错误):解析(对象值(acc));
});
};
基本上是将数据库实例传递给这个函数

每行的结果都存储在
acc
变量中。如果没有带有该串行端口的网关,则会对其进行初始化。然后设备被推到它的集合中。当然,这假定每个网关的串行数据是唯一的,但它应该是唯一的


如果没有错误,则调用
oncomplete
回调时,结果显示为
acc

的值,您正在使用mysql,对吗?请提一下。另外,请接受待定的请求,并记住始终以一种体面的方式提问我正在使用SQLITE