提问人:Blake 提问时间:8/4/2022 更新时间:8/5/2022 访问量:297
Prisma 和 MongoDB 复合类型
Prisma and MongoDB Composite Types
问:
我是第一次与 Prisma 合作,我不确定我是否以正确的方式处理这件事。
这是我的架构的一个片段
model Economy {
id String @id @default(auto()) @map("_id") @db.ObjectId
shops Shop[]
}
type Shop {
id Int @default(0)
name String @default("")
items ShopItem[]
EconomyId String? @db.ObjectId
}
type ShopItem {
id Int @default(0)
enabled Boolean @default(true)
name String @default("")
price Int @default(0)
description String @default("")
commands ShopCommand[]
}
type ShopCommand {
command String @default("")
}
这当然有效,我很容易在 JavaScript 中解构,但是插入和更新很复杂。下面是更新“ShopItem”的示例
const newItem = {
id: 2,
name: body.name,
price: parseInt(body.price),
description: body.description,
enabled: body.enabled == 'true',
commands: newCommands
}
const newEconomy = await prisma.economy.update({
where: {
guildId: guildId,
},
data: {
shops: {
updateMany: {
where: {
id: 0,
} ,
data: {
items : {
push: [newItem]
}
}
}
}
}
})
这很难读,我觉得我做错了。
我研究了其他人是如何做同样的事情的,但我没有找到太多信息。我什至应该使用复合类型,每个类型都应该在它自己的集合中吗?
答:
1赞
Austin Crim
8/5/2022
#1
它看起来像并且可能是他们自己的。它们在本质上看起来足够复杂和相关,可以保证一个单独的实体。Shop
ShopItem
model
复合类型最适合较小的结构化数据片段,这些数据片段可能会在其他几个模型之间重复或共享,但不一定是关系型或唯一性的。
评论
0赞
Blake
8/5/2022
明白了。可以混合这样的系列吗?例如,用户 A 的商店商品将存储在用户 B 的商店商品旁边。在Mongo Compass中显示它时,这难道不会使它难以管理吗,或者是一种典型的模式
评论