跳至主要内容

内省

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

为了说明内省,本指南将帮助您从头开始设置 MongoDB。但如果您已经拥有 MongoDB 数据库,请随意跳至 在您的项目中初始化 Prisma ORM

设置您的数据库

为了实际演示,首先创建一个名为 blog 的数据库,其中包含两个集合: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 内省功能。请在 此问题 中提供有关此功能的反馈。

有了这些,您就可以生成 Prisma Client 了。