mysql - Sequelize:如何使用指定的列重复进行更新
问题描述
如果具有指定列名的记录不匹配或不存在,我想创建新记录,否则更新它。
我有一个这样命名AssignedDownloadRoute
并定义它的模型
AssignedDownloadRoute.init(
{
assigned_download_route_id: {
type: DataTypes.INTEGER,
primaryKey: true,
allowNull: false,
},
route_code: {
type: DataTypes.STRING,
allowNull: false,
},
assigned_user_id: {
type: DataTypes.INTEGER,
allowNull: false,
},
assigner_user_id: {
type: DataTypes.INTEGER,
allowNull: false,
},
reading_period: {
type: DataTypes.STRING,
allowNull: false,
},
created_modified: {
type: DataTypes.DATE,
allowNull: false,
defaultValue: Sequelize.literal('CURRENT_TIMESTAMP')
}
},
{
sequelize: DBInstance,
modelName: 'AssignedDownloadRoute',
tableName: 'assigned_download_route',
timestamps: false,
}
);
假设我有想要插入的数据,但是一旦我已经插入它,它就不应该创建新记录,而是更新/覆盖它。
const bulkData = [
{
route_code: '123',
assigned_user_id: 3,
assigner_user_id: 26,
reading_period: '202105',
created_modified: '2021-06-11 06:36:20'
},
{
route_code: '456',
assigned_user_id: 4,
assigner_user_id: 32,
reading_period: '202105',
created_modified: '2021-06-11 06:36:20'
}
]
当我尝试bulkCreate
使用updateOnDuplicate
选项运行时,它不会更新现有记录,而是创建新记录。我希望现有数据仅在列名匹配/已经存在时assigned_user_id
更新。assigner_user_id
route_code
AssignedDownloadRoute.bulkCreate(bulkData, {
updateOnDuplicate: ['assigned_user_id', 'assigner_user_id'],
});
解决方案
看起来您的模型中只有一个字段可以作为唯一字段 ( assigned_download_route_id
),因为它被定义为主键。由于该值不包含在您的有效负载中,因此每个有效负载没有任何独特之处。如果您想route_code
成为唯一值,则必须在模型中使用unique: true
选项相应地定义它。
AssignedDownloadRoute.init(
{
assigned_download_route_id: {
type: DataTypes.INTEGER,
primaryKey: true,
allowNull: false,
},
route_code: {
type: DataTypes.STRING,
allowNull: false,
unique: true,
},
assigned_user_id: {
type: DataTypes.INTEGER,
allowNull: false,
},
assigner_user_id: {
type: DataTypes.INTEGER,
allowNull: false,
},
reading_period: {
type: DataTypes.STRING,
allowNull: false,
},
created_modified: {
type: DataTypes.DATE,
allowNull: false,
defaultValue: Sequelize.literal('CURRENT_TIMESTAMP')
}
},
{
sequelize: DBInstance,
modelName: 'AssignedDownloadRoute',
tableName: 'assigned_download_route',
timestamps: false,
}
);
有关选项的更多详细信息Models
以及更复杂的唯一键定义(例如复合键)可以在此处阅读:https ://sequelize.org/master/manual/model-basics.html
推荐阅读
- java - 您可以将作用域代理与 Spring Boot 2 @ConfigurationProperties 一起使用吗?
- firebase - FIREBASE 警告:使用未指定的索引。考虑在 /Tasks 添加 ".indexOn": "assignedTo/dynamicID/ldap" 以获得更好的性能
- c# - 如何将 Google Cloud Data loss Prevention 与 asp.net 连接
- c# - 将 int 数组传递给存储过程的表值参数 - 转换失败
- angular - Angular:将本地图像(资产文件夹)绑定到来自 API 的名称
- amazon-web-services - 是否可以通过 Amazon SNS 发送图像
- javascript - D3 v4 动画:如何在多个路径上循环多个圆圈?
- javascript - JavaScript 公式计算不正确(可能是实现、语法或 PEMDAS 错误?)
- python - 如何为神经网络提供复值输入
- ios - Xcode 启动屏幕上的图像视图出现片刻然后消失