首页 > 解决方案 > 如何从续集制作 bulkCreate() 以不创建新数据而只覆盖现有数据

问题描述

我正在从一个 excel 文件中导入大量数据,并使用 sequelize 和 postgres 将这些数据映射到我的数据库中。我有下一个问题,例如,如果有人要修改 excel 文件并想重新上传文件,sequelize 将再次添加与以前相同的数据,并修改特定的文件。我使用updateOnDuplicate但它似乎不起作用。

bulkCreate 的代码:

for (let i = 0; i < sheets.length; i++) {
      if (sheets[i] === "GPS Input") {
        
        const GPSInputSheet = xslx.utils.sheet_to_json(
          workbook.Sheets[workbook.SheetNames[i]]
        );

        uploadGPSInput(GPSInputSheet, GPSInputData);
        GPSInputModel.bulkCreate(GPSInputData, {
          updateOnDuplicate: ["SumOfCurrent"],
        });

我的模型:

const Sequelize = require("sequelize");
module.exports = (sequelize, DataTypes) => {
  return gpsInput.init(sequelize, DataTypes);
};

class gpsInput extends Sequelize.Model {
  static init(sequelize, DataTypes) {
    super.init(
      {
        ProjectName: {
          type: DataTypes.STRING(255),
          allowNull: false,
        },
        DGNumber: {
          type: DataTypes.STRING(255),
          allowNull: false,
        },
        Location: {
          type: DataTypes.STRING(255),
          allowNull: false,
        },
        CostCenter: {
          type: DataTypes.STRING(255),
          allowNull: false,
        },
        SumOfLastApproval: {
          type: DataTypes.DOUBLE,
          allowNull: true,
        },
        SumOfCurrent: {
          type: DataTypes.DOUBLE,
          allowNull: true,
        },
        Expected: {
          type: DataTypes.DOUBLE,
          allowNull: true,
        },
        DiffRealVsRBP: {
          type: DataTypes.DOUBLE,
          allowNull: false,
        },
      },
      {
        sequelize,
        tableName: "gpsInput",
        schema: "public",
        timestamps: true,
        indexes: [],
      }
    );
    return gpsInput;
  }
}

有人能告诉我我错过了什么吗?

标签: javascriptnode.jspostgresqlsequelize.js

解决方案


推荐阅读