【问题标题】:how to maintain order while doing bulk create in sequalizejs LINUX environment?如何在 sequalizejs LINUX 环境中进行批量创建时保持秩序?
【发布时间】:2017-03-06 12:46:16
【问题描述】:

我正在使用 sequalizejs 从 nodejs 创建数据库记录。我正在传递数据数组,并将其添加到数据库表中。 问题是传递的数据没有按原样保存。顺序不同。请建议如何在 sequalizejs 中进行批量创建时保持秩序? . 此问题仅在 LINUX 环境中可见。在 Windows 服务器中,它工作正常。

data - ["A","B","C","D"]
table row order - "B" , "D" , "C" , "A" 

每次运行的顺序都会有所不同。

models.MyTable.bulkCreate(req.body, { individualHooks: true }).then(function (mydata) {
        result.status(200).json(mydata);
});

【问题讨论】:

  • 您的代码生成的确切 SQL 是什么?那些单独的模型hooks 执行什么操作?
  • SQL 与 .. INSET INTO ... 钩子没有执行任何特定任务。

标签: javascript node.js database-design sequelize.js


【解决方案1】:

当您使用{ individualHooks: true } 时,sequalize 将为插入创建多个 SQL 查询。 所有这些查询将并行运行(如Promise.all([insertQueries])。很可能您使用连接池进行数据库连接 - 这意味着您的所有查询将同时运行(受设置限制options.pool.max = 默认5)。 见https://github.com/sequelize/sequelize/blob/v3/lib/model.js#L2169

如果查询顺序对您很重要,请使用 next

var mapSeries = require('bluebird').mapSeries;
mapSeries(req.body, (item) => models.MyTable.create(item))
 .then(function (mydata) {
      result.status(200).json(mydata);
 });

【讨论】:

  • 谢谢。如果我删除 "{ individualHooks: true }" 那么所有 SQL INSERT 语句都将按顺序排列?
  • 否 - 这将只是一个查询,它会插入所有记录。但这会以正确的顺序插入您的记录(您询问的内容)
  • 太棒了!! .我会试试这个,让你知道!
猜你喜欢
  • 2018-01-23
  • 1970-01-01
  • 1970-01-01
  • 2014-02-26
  • 1970-01-01
  • 2018-12-10
  • 1970-01-01
  • 2014-03-05
  • 2013-07-22
相关资源
最近更新 更多