跳至主要内容

内省

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