我正在阅读 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/