.upsertMany() 在 Prisma ORM 中是如何实现的?

问题描述 投票:0回答:3

Prisma ORM 具有 update 或 create

upsert()
方法的实现以及一组 批量请求
但不存在
.upsertMany()
这样的东西,即批量“创建或更新现有记录”。

使用 Prisma ORM 实现这种方法的最佳方式是什么?

javascript node.js typescript orm prisma
3个回答
12
投票

Prisma 本身不支持

upsertMany

有一个功能请求提供

upsertMany
方法。

目前最好的方法是循环数据并在循环中调用

upsert
并使用
$transaction

示例:

const collection = await prisma.$transaction(
    userData.map(cur =>
      prisma.cur.upsert({
        where: { id: cur.id },
        update: {},
        create: { id: cur.id },
      })
    )
  )

这里有一个对 $transaction API 的参考,应该会有帮助。


0
投票

我确实想知道是否不使用

$transaction
API 并循环数据,而是检查数据库是否应插入或更新每条记录,然后使用
createMany
updateMany
来提高性能。


0
投票

您可以使用 upsert 更新多个对象,如下所示: 在以下示例中,我将更新用户的个人资料并使用地图功能更新插入多个地址。

await this.prisma.user.update({
                where: {
                    id: user.id
                },
                data:{
                    fullName: saveUserProfileDto?.fullName,
                    email: saveUserProfileDto?.email,
                    
                    userAddresses: {
                        upsert: saveUserProfileDto?.addresses?.map(address => ({
                            where: {
                                uuid: address.uuid || ""
                            },
                            create: {
                                uuid: uuidv4(),
                                country: address.country,
                                cityTown: address.cityTown,
                                streetAddress: address.streetAddress,
                                apartmentSuit: address.apartmentSuit,
                            },
                            update: {
                                country: address.country,
                                cityTown: address.cityTown,
                                streetAddress: address.streetAddress,
                                apartmentSuit: address.apartmentSuit,
                            }
                        }))
                    }
                }
            });

© www.soinside.com 2019 - 2024. All rights reserved.