【问题标题】:Increment or Decrement value using Sequelize upsert()使用 Sequelize upsert() 增加或减少值
【发布时间】:2021-06-29 09:06:10
【问题描述】:

在 Sequelize 中,如果新行不存在,我将使用 upsert() 插入新行,如果存在,则将其中一个字段值增加其他值。

插入工作正常,但是当值更新时,它不会增加而是完全更新

let x = 5;

OrderDetails.upsert({ 
   menuItemId: 1234, 
   orderId: 4321, 
   quantity: sequelize.literal((`quantity + ${x}`)
})

这会导致以下查询:

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`);

因此,例如,如果之前的值是 10,那么在查询之后更新的值将是 5 而不是 15

我的猜测是在使用upsert()sequelize.literal() 时,Sequelize 中存在一种错误。显然,它只在插入时被识别,在更新时不被识别。

【问题讨论】:

    标签: mysql node.js sequelize.js


    【解决方案1】:

    显然,Sequelize 中有一个错误,所以我在 Github 上打开了一个关于它的问题 (you can check it out here)。这个问题是在 Sequelize 版本 6.3.5 中提出的,所以如果你正在阅读这个问题,那么这个问题可能已经解决了。

    我最终做的是获取该字段的先前值,然后将其与要增加的数量相加:

    let extra = 5;
    let previousValue = /....LOGIC.../
    
    OrderDetails.upsert({ 
       menuItemId: 1234, 
       orderId: 4321, 
       quantity: previousValue + extra
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-06
      • 2017-06-03
      • 1970-01-01
      • 1970-01-01
      • 2021-11-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多