跳到主要内容

内省

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

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

设置您的数据库

为了看到实际效果,首先创建一个包含 2 个集合的 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 内省功能。请在 此 issue 中提供有关此功能的反馈。

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