Prisma ORM 具有 update 或 create
upsert()
方法的实现以及一组
批量请求,.upsertMany()
这样的东西,即批量“创建或更新现有记录”。
使用 Prisma ORM 实现这种方法的最佳方式是什么?
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 的参考,应该会有帮助。
我确实想知道是否不使用
$transaction
API 并循环数据,而是检查数据库是否应插入或更新每条记录,然后使用 createMany
和 updateMany
来提高性能。
您可以使用 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,
}
}))
}
}
});