跳转到主要内容

内省

Prisma ORM 通过抽样给定数据库中存储的数据并推断该数据的模式来内省 MongoDB 模式。

为了说明内省的目的,本指南将帮助你从头开始设置 MongoDB。但是,如果你已经有一个 MongoDB 数据库,请随时跳转到 初始化 Prisma ORM

设置你的数据库

为了看到实际效果,首先创建一个名为 blog 的数据库,其中包含 2 个集合:UserPost。我们推荐使用 MongoDB Compass 来进行设置

Create a blog database using Compass

首先,向我们的 User 集合添加一个用户

Create a user within the User collection

接下来,向我们的 Post 集合添加一些帖子。重要的是 userId 中的 ObjectID 与你上面创建的用户匹配。

Create some posts within the Post collection

初始化 Prisma ORM

现在你已经有了一个 MongoDB 数据库,下一步是创建一个新项目并初始化 Prisma ORM

mkdir blog
cd blog
npm init -y
npm install -D prisma
npx prisma init

初始化 Prisma ORM 将创建一个 prisma/schema.prisma 文件。编辑此文件以使用 MongoDB

prisma/schema.prisma
datasource db {
provider = "mongodb"
url = env("DATABASE_URL")
}

generator client {
provider = "prisma-client-js"
}

接下来,你需要调整你的 .env 文件,将 DATABASE_URL 指向你的 MongoDB 数据库

使用 Prisma ORM 内省 MongoDB

你现在可以进行内省了。运行以下命令来内省你的数据库

npx prisma db pull

此命令内省我们的数据库并将推断的模式写入你的 prisma/schema.prisma 文件

prisma/schema.prisma
datasource db {
provider = "mongodb"
url = env("DATABASE_URL")
}

generator client {
provider = "prisma-client-js"
}

model Post {
id String @id @default(auto()) @map("_id") @db.ObjectId
title String
userId String @db.ObjectId
}

model User {
id String @id @default(auto()) @map("_id") @db.ObjectId
email String
}

调整模式

为了能够使用 Prisma Client 连接数据,你可以将 @relation 属性添加到我们的模型中

prisma/schema.prisma
datasource db {
provider = "mongodb"
url = env("DATABASE_URL")
}

generator client {
provider = "prisma-client-js"
}

model Post {
id String @id @default(auto()) @map("_id") @db.ObjectId
title String
userId String @db.ObjectId
user User @relation(fields: [userId], references: [id])
}

model User {
id String @id @default(auto()) @map("_id") @db.ObjectId
email String
posts Post[]
}
提示

我们正在积极开发 MongoDB 内省功能。请在 issue 中为此功能提供反馈。

这样,你就可以生成 Prisma Client 了。