【问题标题】:Sequelize conditional on upsert以 upsert 为条件进行续集
【发布时间】:2020-12-01 14:33:51
【问题描述】:

我目前正在使用带有 node.js 的 sequelize v5。我正在尝试使用 upsert 创建新行或更新现有行,但我希望仅在满足条件时触发更新。

await Model.upsert({values});

在模型表中,我有一个布尔列。如果布尔值为真,我希望更新不会覆盖现有行。我想也许我可以为 beforeUpdate 或 beforeSave 使用挂钩,但我想不通。

编辑:如果这很重要,我正在使用 postgresql。

【问题讨论】:

    标签: node.js sequelize.js


    【解决方案1】:

    对于 v5 中的 upsert 操作,已经有一个 beforeUpsert 钩子,尝试一下可能会有帮助。

    这里是 Sequelize v5 的 official docs,您可以在其中找到所有钩子及其用法

    【讨论】:

      【解决方案2】:

      假设您的模型名为User 你声明了模型类

      class User extends Model {}
      User.init({
        username: DataTypes.STRING,
        mood: {
          type: DataTypes.ENUM,
          values: ['happy', 'sad', 'neutral']
        }
      });
      
      
      

      你可以用这样的广告钩子

      User.beforeUpsert(user, options) => {
        if(user.condition){
      ... do stuff
        }
      });
      

      【讨论】:

      • 如果那里不满足该条件,我将如何防止 upsert?根据我对那个钩子的理解,我可以做其他方法,但是在方法完成后 upsert 仍然会通过。我可能是错的,因为我还没有经常使用钩子。
      • 返回条件时可以停止执行函数;
      • ``` if (condition) return; ```
      猜你喜欢
      • 2019-09-08
      • 1970-01-01
      • 2014-04-04
      • 1970-01-01
      • 1970-01-01
      • 2016-02-20
      • 1970-01-01
      • 2015-12-09
      • 2015-10-14
      相关资源
      最近更新 更多