【问题标题】:knex insert multiple rowsknex 插入多行
【发布时间】:2019-02-21 14:09:29
【问题描述】:

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

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

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

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

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

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

预期结果:

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

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

【问题讨论】:

  • insert() 可以接受要插入的行数组。
  • 试过了,但这似乎对我不起作用,或者我做错了knex('metadata').insert([{ field_id: fields, product_id: product_id, value: req.body[fields] }])这是我试过的。我不知道如何设置 field_id 和 req.body 以动态获取它,因为字段是 ID 的数组
  • 您能否用您尝试调用插入的方式更新您的问题?
  • 我已经更新了我的问题
  • 你必须对你正在做的事情更具声明性,当你将一个包含单个元素的数组传递给 knex 时,它只会尝试插入 一个 项。我会在下面贴出正确的用法

标签: sql postgresql knex.js


【解决方案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 */});

【讨论】:

  • 是否可以以类似的方式进行操作 knex - where - update ?根据 id 数组更新多行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-10
  • 2017-06-14
  • 2017-09-13
  • 1970-01-01
  • 1970-01-01
  • 2015-05-09
相关资源
最近更新 更多