我正在阅读 over the doc ,它提到了两种进行 upsert 的方法: findOrCreate()upsert() 。我阅读了描述,但我仍然不清楚有什么区别。
upsert() 继续说:

Note that the unique index must be defined in your sequelize model and not just in the table. Otherwise you may experience a unique constraint violation, because sequelize fails to identify the row that should be updated.

这是否意味着 upsert() 明确要求我在模型中定义一个 id UNIQUE 主字段? IE:
var Something = sequelize.define("Something", { id: {
                    type: DataTypes.INTEGER,
                    primaryKey: true,
                    unique: true,
                    allowNull: false}});

如果是这样,为什么 findOrCreate() 没有这个限制?

有人可以解释什么时候应该使用 findOrCreate()upsert() 的用例,以及为什么 upsert()findOrCreate() 似乎不需要时具有唯一约束要求?

最佳答案

.findOrCreate 将使用您提供的参数查询数据库,如果不匹配,它将使用相同的参数执行插入操作。而 .upsert 的重点是更新或插入记录。在更新操作的情况下,逻辑要求您根据唯一键查找记录,并且只有在找到此唯一记录后,才根据提供的参数更新其值。如果您无法找到唯一的记录,那么您才会执行插入操作。

我希望这是有道理的。

关于node.js - sequelize 中 findOrCreate() 和 upsert() 的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28249394/

10-11 12:06