Node.js、MySQL、Sequelizeを使用しています。一度に1万行をテーブルに挿入したいのですが。テーブルには、手動で設定されているカスタムprimaryKey
フィールドがあります。データはWebからダウンロードされ、重複しています。
データ内のいずれかの行に、テーブルにすでに存在する一意のキーがある場合でも失敗しないバージョンのbulkCreate
が欲しいのですが。このようなことは、MySQLでINSERT ... ON DUPLICATE KEY UPDATE
構文を介して行われます。
Sequelizeでそれを行うにはどうすればよいですか?
IgnoreDuplicatesをtrueに設定して、optionsオブジェクトをbulkCreateに渡します
bulkCreate([...], { ignoreDuplicates: true })
ユリの答えは重複を無視します...updateOnDuplicate
のオプションがあります:
行キーがすでに存在する場合に更新するフィールド(重複キーの更新時)? (mysqlとmariadbでのみサポートされています)。デフォルトでは、すべてのフィールドが更新されます。
http://docs.sequelizejs.com/en/latest/api/model/#bulkcreaterecords-options-promisearrayinstance
以下は一括更新の正しい構文です。「sequelize」でテスト済み:「6.0.0」
model.bulkCreate(dataToUpdate, { updateOnDuplicate: ["user_id", "token", "created_at"] })
pdateOnDuplicateで指定されたすべての列を、dataToUpdateにある最初の列の値で更新します
ProductAttribute.bulkCreate(arrayToUpsert, {updateOnDuplicate: ['id', 'attributeValue'] })
-これにより、arrayToUpsertで示されたIDで各attributeValueが更新されます