如何在 prisma ORM 中更新插入多个字段

xan*_*der 25 javascript sql node.js prisma prisma2

如何使用一个查询在 prisma ORM 中更新插入多个字段?

我不想一一使用 upsert 字段。我可以通过一个查询更新插入所有这些内容吗?

Dan*_*ila 19

您现在无法在 Prisma 中执行此操作。有createManyupdateMany而且deleteMany,但是没有upsertMany。(文档

如果您需要处理大量数据,最有效的方法可能是这样的:

prisma.$transaction([
  prisma.posts.deleteMany({ where: { userId: 1 } }),
  prisma.posts.createMany({
    { id: 1, title: 'first',  userId: 1 },
    { id: 2, title: 'second', userId: 1 },
    { id: 3, title: 'third',  userId: 1 },
  }),
]);
Run Code Online (Sandbox Code Playgroud)

因此,您删除现有记录,然后在事务内再次重新创建它们。

  • 对我来说,记录有很多依赖项,我不能直接删除它们,否则我违反了很多限制。 (4认同)

Mar*_*tin 7

根据您使用的数据库(和架构),Prisma 支持 createMany 调用中的可选布尔值:skipDuplicates,请参阅https://www.prisma.io/docs/reference/api-reference/prisma-client-reference#createmany

不要插入具有唯一字段或已存在的 ID 字段的记录。仅受支持 ON CONFLICT DO NOTHING 的数据库支持。

  • 这不是所要求的“发生冲突时不做任何事情”不会更新现有记录。不幸的是,尽管需求量很大,但该功能尚不可用。 (7认同)
  • 我认为这不是OP所要求的,因为如果现有记录存在,skipDuplicates不会“更新”,而是会跳过它们。 (2认同)