Kay*_*ote 5 javascript database insert-update prisma prisma2
假设我有一个来自前端的数据结构,如下所示:
const userData = [
{
id: 11223,
bb: [
{
id: 12,
},
{
id: 34,
bbb: "bbb",
},
],
},
{
id:4234,
...
},
];
Run Code Online (Sandbox Code Playgroud)
因为,没有/部分/全部数据可能已经在数据库中,这是我想出的:
const collection = [];
for (let i = 0; i < userData.length; i++) {
const cur = userData[i];
const subCur = cur.bb;
const updatedCur = await db.cur.upsert({
where: {
id : cur.id
},
update: {
...
},
create: {
...
},
})
);
collection.push(updatedCur);
for (let j = 0; j < subCur.length; j++) {
const latest = subCur[j];
await db.subcur.upsert({
where: {
id : latest.id
},
update: {
...
},
create: {
...
},
});
}
}
Run Code Online (Sandbox Code Playgroud)
总而言之,我正在将 userData 和upsert每个对象一一映射。在循环中,我映射子集合以及upsert它们在数据库中。
我担心的是我以这种方式在数据库中输入了很多条目。这是最好的方法吗?
旁白:我之前尝试inserts在 中执行多个操作,但是,据我所知,upsert我陷入了该部分,我们无法在嵌套的中更新插入多个记录。它是否正确?updateupdateupsert
更新:
根据 Ryan 的要求,架构如下:
model Cur {
id Int,
subCur SubCur[]
...
}
model SubCur {
id Int,
cur Cur @relation(fields: [curId], references : [id])
curId Int
...
}
Run Code Online (Sandbox Code Playgroud)
总而言之,有很多像“SubCur”这样的模型与“Cur”模型具有 1-n 关系。作为“UserData”有效负载,可能有一些新数据,一些数据是数据库中现有数据的更新,我很好奇,将upsert数据放入数据库的最佳方法是什么。具体来说,我是否必须一次插入一个?
我假设你的架构是这样的:
model Cur {
id Int @id
}
model Subcur {
id Int @id
bbb String?
}
Run Code Online (Sandbox Code Playgroud)
这是一个更好的版本:
const collection = await prisma.$transaction(
userData.map(cur =>
prisma.cur.upsert({
where: { id: cur.id },
update: {},
create: { id: cur.id },
})
)
)
await prisma.$transaction(
userData
.flatMap(cur => cur.bb)
.map(latest =>
prisma.subcur.upsert({
where: {
id: latest.id,
},
update: {
bbb: latest.bbb,
},
create: {
id: latest.id,
bbb: latest.bbb,
},
})
)
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6655 次 |
| 最近记录: |