首页 > 解决方案 > knex 插入多行

问题描述

我在使用 knex 将许多行插入 postgres db 时遇到问题。我有需要插入的动态行数。我期望的结果是:

插入行四次(例如四次。我不知道插入的确切数量,因为它来自前端动态):

我怎样才能做到这一点?我尝试用 forEach 循环它,但它是异步操作,所以我不能使用 .then(),因为它会被调用四次

这是我尝试过的。我不知道如何设置 field_id 和 req.body 以动态获取它。

字段 = [1,2,3,4]

预期结果:

knex 创建 4 个插入如下: field_id: 1, product_id: some static id value: frontValue[1] ETC

knex('metadata').insert(
 [{ field_id: fields, 
    product_id: product_id, 
    value: req.body[fields] 
 }]
)

标签: sqlpostgresqlknex.js

解决方案


如果我理解正确,您想在metadata表中插入 4 条记录:

{ field_id: 1, product_id: X, value: req.body[1] },
{ field_id: 2, product_id: X, value: req.body[2] },
{ field_id: 3, product_id: X, value: req.body[3] },
{ field_id: 4, product_id: X, value: req.body[4] }

要在同一个语句中插入多条记录,它们每个都需要是您提供给 Knex 的数组中的单独元素(查看insert文档以获取更多示例):

const product_id = X;
const fieldsToInsert = fields.map(field => 
  ({ field_id: field, product_id, value: req.body[field] })); 

return knex('metadata').insert(fieldsToInsert)
  .then(() => { /* handle success */ })
  .catch(() => { /* handle failure */});

推荐阅读