跳到主要内容

内省

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 --datasource-provider mongodb --output ../generated/prisma

初始化 Prisma ORM 将创建一个如下所示的 prisma/schema.prisma 文件

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 了。