2017-03-06 19 views
0

我正在使用sequalizejs從nodejs創建數據庫記錄。我正在傳遞數據數組,並將其添加到數據庫表中。 問題是傳遞的數據不會保存原樣。順序是不同的。請建議如何在sequalizejs中進行批量創建時維護訂單? 。 該問題僅在LINUX環境下才能看到。在Windows服務器中,它工作正常。如何在sequalizejs LINUX環境下批量創建時如何保持順序?

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); 
}); 
+0

什麼是你的代碼生成的確切'SQL'?那些單個模型「鉤子」執行什麼操作? – piotrbienias

+0

SQL與.. INSET INTO ...鉤子沒有執行任何特定任務相同。 – JavaUser

回答

1

當您使用{ individualHooks: true }然後sequalize將爲插入多個SQL查詢。 所有這些查詢將並行運行(如Promise.all([insertQueries])。很可能您使用連接池進行數據庫連接 - 這意味着您的所有查詢都將同時運行(受設置options.pool.max =默認值5限制)。 見https://github.com/sequelize/sequelize/blob/v3/lib/model.js#L2169

如果查詢的順序是對你很重要,接下來使用

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

謝謝。如果我刪除「{individualHooks:true}」,那麼所有的SQL INSERT語句將按照順序排列? – JavaUser

+1

否 - 它將只是一個插入所有記錄的查詢。 但這插入你的記錄在正確的順序(你問了什麼) –

+0

偉大的! 。我會試試這個,讓你知道! – JavaUser