knex插入多行

时间:2019-02-21 14:09:30

标签: sql postgresql knex.js

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

将行插入四次(例如,四次。由于前端动态产生的插入次数,我不知道确切数目):

  • field_id 在每一行中都是不同的:(1,2,3,4)-我有这些ID的数组
  • id_of_product 将始终相同
  • 将始终是不同的:(来自Frontend的req.body [id])-方括号中的ID与 field_id 中的值相同 数组

我该如何实现?我尝试用forEach循环它,但是它是异步操作,所以我不能使用.then(),因为它将被调用四次

这就是我尝试过的。我不知道如何设置field_id和req.body以使其动态。

fields = [1,2,3,4]

预期结果:

knex创建4个插入,如下所示: field_id:,1 product_id::一些静态ID 值: frontValue [1] ETC

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

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您想在您的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 */});