在 Sequelize 中,我使用 upsert() 插入新行(如果不存在),或者将其字段值之一增加某个其他值(如果存在)。
插入工作正常,但当值更新时,它不会增加,而是完全更新
let x = 5;
OrderDetails.upsert({
menuItemId: 1234,
orderId: 4321,
quantity: sequelize.literal((`quantity + ${x}`)
})
Run Code Online (Sandbox Code Playgroud)
这会产生以下查询:
INSERT INTO `OrderDetails` (`menuItemId`,`orderId`,`quantity`,`createdAt`,`updatedAt`) VALUES (?,?,quantity + 5,?,?)
ON DUPLICATE KEY UPDATE `menuItemId`=VALUES(`menuItemId`),`orderId`=VALUES(`orderId`),`quantity`=VALUES(`quantity`),`updatedAt`=VALUES(`updatedAt`);
Run Code Online (Sandbox Code Playgroud)
因此,例如,如果先前的值是10
在查询之后,则更新后的值将5
代替15
。
upsert()
我的猜测是 Sequelize 在使用with时存在一种错误sequelize.literal()
。显然,它仅在插入时被识别,而在更新时未被识别。