如何在Prisma中将三个独立模型合并为一个Information模型?
如何将三个Prisma模型整合为一个Information模型(NestJS + MongoDB)
根据你的需求,有两种常见实现方式,取决于你是否需要保留原有的men、women、child独立模型:
方式一:嵌入式文档(直接嵌套数据)
适合不需要单独操作原模型、希望所有数据存在同一个MongoDB文档的场景。
步骤1:定义嵌套类型
先在Prisma Schema中定义对应的数据类型(复用原模型的字段):
type Male { malename: String malegender: String maledob: String maleincome: String } type Women { womenname: String womengender: String womendob: String womenincome: String } type Child { childname: String childgender: String childdob: String }
步骤2:创建Information模型
用上述类型定义嵌套字段:
model Information { id String @id @default(auto()) @map("_id") @db.ObjectId male Male? // 可选字段,根据业务需求改为必填(去掉?) women Women? child Child? }
这种方式下,所有数据会直接嵌入Information文档中,查询时无需关联其他表。
方式二:关系关联(保留原模型)
适合需要单独维护men、women、child数据,或数据可能被多个Information引用的场景。
步骤1:修改原模型添加关联字段
给每个原模型添加关联到Information的字段:
model Men { id String @id @default(auto()) @map("_id") @db.ObjectId malename String malegender String maledob String maleincome String // 关联到Information information Information? @relation(fields: [informationId], references: [id]) informationId String? @db.ObjectId } model Women { id String @id @default(auto()) @map("_id") @db.ObjectId womenname String womengender String womendob String womenincome String information Information? @relation(fields: [informationId], references: [id]) informationId String? @db.ObjectId } model Child { id String @id @default(auto()) @map("_id") @db.ObjectId childname String childgender String childdob String information Information? @relation(fields: [informationId], references: [id]) informationId String? @db.ObjectId }
步骤2:定义Information模型的关联
在Information中声明关联的原模型字段:
model Information { id String @id @default(auto()) @map("_id") @db.ObjectId male Men? women Women? child Child? }
查询示例(NestJS中)
查询时通过include关联获取关联数据:
const info = await this.prisma.information.findUnique({ where: { id: '目标ID' }, include: { male: true, women: true, child: true }, });
后续操作
修改完Schema后,执行以下命令更新Prisma客户端:
npx prisma generate
如果已有存量数据,需要编写迁移脚本将原模型的数据同步到新的Information模型中。
内容的提问来源于stack exchange,提问作者jaswant patel
相关产品推荐
相关产品推荐

