web-dev-qa-db-ja.com

続編:一括挿入

Node.js、MySQL、Sequelizeを使用しています。一度に1万行をテーブルに挿入したいのですが。テーブルには、手動で設定されているカスタムprimaryKeyフィールドがあります。データはWebからダウンロードされ、重複しています。

データ内のいずれかの行に、テーブルにすでに存在する一意のキーがある場合でも失敗しないバージョンのbulkCreateが欲しいのですが。このようなことは、MySQLでINSERT ... ON DUPLICATE KEY UPDATE構文を介して行われます。

Sequelizeでそれを行うにはどうすればよいですか?

11
polkovnikov.ph

IgnoreDuplicatesをtrueに設定して、optionsオブジェクトをbulkCreateに渡します

bulkCreate([...], { ignoreDuplicates: true })
16
Yuri Zarubin

ユリの答えは重複を無視します...updateOnDuplicateのオプションがあります:

行キーがすでに存在する場合に更新するフィールド(重複キーの更新時)? (mysqlとmariadbでのみサポートされています)。デフォルトでは、すべてのフィールドが更新されます。

http://docs.sequelizejs.com/en/latest/api/model/#bulkcreaterecords-options-promisearrayinstance

9
Sean

以下は一括更新の正しい構文です。「sequelize」でテスト済み:「6.0.0」

model.bulkCreate(dataToUpdate, { updateOnDuplicate: ["user_id", "token", "created_at"] })

pdateOnDuplicateで指定されたすべての列を、dataToUpdateにある最初の列の値で更新します

1
Rohit Parte

ProductAttribute.bulkCreate(arrayToUpsert, {updateOnDuplicate: ['id', 'attributeValue'] })-これにより、arrayToUpsertで示されたIDで各attributeValueが更新されます

1