Mysql Sequelize bulkCreate:updateOnDuplicate

Mysql Sequelize bulkCreate:updateOnDuplicate,mysql,node.js,sequelize.js,Mysql,Node.js,Sequelize.js,我正在向数据库中输入大量数据,并使用此模型将updateOnDuplicate选项应用于bulkCreate。因此,我无法在这里验证是否正常。我的问题是,因为我使用了一个唯一的值,它也可以用于updateOnDuplicate条件,或者只是用于检查重复项的主键 问题是bulkCreate isid的表中的主键是自动递增的。我的模型中有多个唯一的值,不希望只检查主键就更新任何内容。它是否考虑了所有的Unique,还是我必须手动完成 customer_id: { type: Da

我正在向数据库中输入大量数据,并使用此模型将updateOnDuplicate选项应用于bulkCreate。因此,我无法在这里验证是否正常。我的问题是,因为我使用了一个唯一的值,它也可以用于updateOnDuplicate条件,或者只是用于检查重复项的主键

问题是bulkCreate is
id
的表中的主键是自动递增的。我的模型中有多个唯一的值,不希望只检查主键就更新任何内容。它是否考虑了所有的Unique,还是我必须手动完成

    customer_id: {
      type: DataTypes.BIGINT,
      allowNull: false,
      unique: true
    },
    shop_id: {
      type: DataTypes.INTEGER(10).UNSIGNED,
      allowNull: false,
      unique: true,
      references: {
        model: 'shop',
        key: 'id'
      }
    },
    email: {
      type: DataTypes.STRING(255),
      allowNull: false
    }, 
    others: {
      type: DataTypes.STRING(255),
      allowNull: false
    },{
    timestamps: false,
    createdAt: false,
    updatedAt: false,
    tableName: 'customers'
  }

根据我的观点,BulkCube只对ID起作用(不考虑唯一约束)。 所以,如果您试图使用bulkCreate插入重复的值(在具有唯一值约束的列中),那么它将抛出一个错误,并且不会插入任何记录。因此,在这种情况下,您必须手动执行该检查

因此,我建议首先检查唯一值,然后使用bulkCreate 或 循环记录并为每个记录调用
findOrCreate
方法,并将唯一值列放入where条件中,如。这将需要更多的时间比创造,但更具体的一个

Model.findOrCreate({
where: {
customer_id: cust_val,
shop_id: shop_val
}
}).spread(function(record, created){
if (created){
   console.log('New Record Created');
}
});

我实际上需要更新和创建这两者,这是选择bulkCreate的一个原因。但是让我试试这个