我正在向数据库中输入大量数据,并且正在使用此模型将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');
}
});