Sql 节点Postgres基于数组和静态变量插入多行

Sql 节点Postgres基于数组和静态变量插入多行,sql,node.js,postgresql,node-postgres,Sql,Node.js,Postgresql,Node Postgres,我正在尝试基于数组从Nodejs服务器向PostgresSQL服务器插入多行。我有一个静态变量user_id,它对于所有条目都是相同的,但是我想根据数组更改过滤器的名称。我的目标是不进行多个SQL insert调用 arrayOfFilters = ["CM", "CBO", "SA", "EPS", "AD"] await db.query( "INSERT INTO filters(filter_name, requests_id)VALUES($1, $2)",

我正在尝试基于数组从Nodejs服务器向PostgresSQL服务器插入多行。我有一个静态变量user_id,它对于所有条目都是相同的,但是我想根据数组更改过滤器的名称。我的目标是不进行多个SQL insert调用

arrayOfFilters = ["CM", "CBO", "SA", "EPS", "AD"]

await db.query(
            "INSERT INTO filters(filter_name, requests_id)VALUES($1, $2)",
            [arrayOfFiltersParams, user_id]);
我希望在过滤器表中为ArrayOfficers中找到的每个过滤器都有一行,每个条目都有一个匹配的用户id键,在本例中为5行。 非常感谢

编写一个助手函数展开以生成。以下是一个解决方案:

从“../../db”导入{pgclient}; 函数expandrowCount,columnCount,startAt=1{ var指数=startAt; 返回阵列计数 .fill0 地图 v=> `${ArraycolumnCount .fill0 .mapv=>`$${index++}` .join','}`, 。加入“,”; } 函数展平{ var newArr:任何[]=[]; arr.forEachv=>v.forEachp=>newArr.pushp; 返回newArr; } 异步功能测试{ 试一试{ 等待pgclient.connect; //创建表 等待pgclient.query` 如果不存在筛选器,则创建表 id串行主键, 过滤器名称VARCHAR10, 请求\u id整数 `; //试验 常量数组过滤器=['CM'、'CBO'、'SA'、'EPS'、'AD']; const user_id=1; const arrayOfFiltersParams:any[]=arrayOfFilters.mapel=>[el,user_id]; 等待pgclient.query `插入过滤器过滤器名称,请求id值${expandarrayOfFilters.length,2}`, 平面阵列滤波器, ; }捕捉错误{ console.logerror; }最后{ pgclient.end; } }; 执行上述代码后,检查数据库:

节点sequelize示例=从过滤器中选择*; id |过滤器|名称|请求| id --+-------+------- 1厘米1 2 | CBO | 1 3 | SA | 1 4 |每股收益| 1 5 | AD | 1 5排
不,你不能这样做。您需要对ArrayOffilter中的每个项重复此查询。构造多值insert语句有一些优化,但在这种情况下不值得。回答得很好,解决了我的问题,谢谢。