我正在向数据库中输入大量数据,并且正在使用此模型将updateOnDuplicate选项应用于bulkCreate。因此,我无法在这里验证其理智。我的问题是,因为我具有的唯一值也可用于updateOnDuplicate条件,或者仅是用于检查重复项的主键。

问题是我在表中的bulkCreate的主键是id,它是自动递增的。我的模型中有多个唯一值,并且只检查主键就不想更新任何内容。是否要考虑所有唯一性,还是我必须手动进行?

    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'
  }

最佳答案

根据我的观点,bulkCreate将仅对id起作用(不应考虑唯一约束)。

因此,如果您尝试使用bulkCreate插入重复的值(在具有唯一值约束的列中),那么它将抛出错误并且不会插入任何记录。因此,在这种情况下,您必须手动进行检查。

所以我建议首先检查唯一值,然后再使用bulkCreate。
要么
遍历记录并为每个记录调用findOrCreate方法,并将唯一值列放在条件类似的位置。这比bulkCreate需要更多时间,但更具体。

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

10-06 15:30