跳到主要内容

内省

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

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

设置你的数据库

要查看实际操作,首先创建一个包含 2 个集合(`User` 和 `Post`)的 `blog` 数据库。我们推荐使用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` 文件。编辑此文件以使用 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。

© . All rights reserved.