向现有 MongoDB 项目添加 Prisma ORM
MongoDB 是一款流行的基于文档的 NoSQL 数据库,以其灵活性、可扩展性和对开发人员友好的特性而闻名。在本指南中,你将学习如何向现有的 TypeScript 项目添加 Prisma ORM,将其连接到 MongoDB,自省现有数据库模式,并开始使用类型安全的 Prisma Client 进行查询。
Prisma ORM v7 的 MongoDB 支持即将推出。在此期间,使用 MongoDB 时请使用 Prisma ORM v6.19(最新的 v6 版本)。
本指南使用 Prisma ORM v6.19 以确保与 MongoDB 的完全兼容性。
如果你正在从 Mongoose 迁移到 Prisma ORM,请参阅我们的从 Mongoose 迁移指南。
先决条件
为了成功完成本指南,你需要
- 你的机器上安装了 Node.js(请参阅系统要求以了解官方支持的版本)
- 一个带有
package.json文件的现有 TypeScript 项目 - 访问具有副本集部署的 MongoDB 4.2+ 服务器。我们建议使用 MongoDB Atlas。
确保你手头有数据库连接 URL(其中包含你的身份验证凭据)!
如果你的项目包含多个带有 package.json 文件的目录(例如,frontend、backend 等),请注意 Prisma ORM 专门设计用于 API/后端层。要设置 Prisma,请导航到包含相关 package.json 文件的相应后端目录并在那里配置 Prisma。
1. 设置 Prisma ORM
导航到您现有的项目目录并安装所需的依赖项
npm install prisma@6.19 @types/node --save-dev
npm install @prisma/client@6.19 dotenv
每个包的作用如下
prisma- 用于运行prisma init、prisma db pull和prisma generate等命令的 Prisma CLI@prisma/client- 用于查询数据库的 Prisma Client 库dotenv- 从您的.env文件加载环境变量
这是完全支持 MongoDB 的 Prisma ORM v6 最新稳定版本。Prisma ORM v7 对 MongoDB 的支持即将推出。
你也可以安装 prisma@6 和 @prisma/client@6 以自动获取最新的 v6 版本。
2. 初始化 Prisma ORM
使用以下命令创建 Prisma Schema 文件来设置您的 Prisma ORM 项目
npx prisma init --datasource-provider mongodb --output ../generated/prisma
此命令执行以下操作
- 创建一个
prisma/目录,其中包含一个schema.prisma文件,其中包含您的数据库连接配置 - 在根目录中创建一个
.env文件用于环境变量 - 创建一个
prisma.config.ts文件用于 Prisma 配置
生成的 prisma.config.ts 文件如下所示
import { defineConfig, env } from 'prisma/config'
export default defineConfig({
schema: 'prisma/schema.prisma',
migrations: {
path: 'prisma/migrations',
},
engine: "classic",
datasource: {
url: env('DATABASE_URL'),
},
})
将 dotenv 添加到 prisma.config.ts,以便 Prisma 可以从你的 .env 文件加载环境变量
import 'dotenv/config'
import { defineConfig, env } from 'prisma/config'
export default defineConfig({
schema: 'prisma/schema.prisma',
migrations: {
path: 'prisma/migrations',
},
engine: "classic",
datasource: {
url: env('DATABASE_URL'),
},
})
生成的 schema 使用带有自定义输出路径的 ESM 优先的 prisma-client 生成器
generator client {
provider = "prisma-client"
output = "../generated/prisma"
}
datasource db {
provider = "mongodb"
url = env("DATABASE_URL")
}
3. 连接您的数据库
使用你的 MongoDB 连接 URL 更新 .env 文件
DATABASE_URL="mongodb+srv://username:password@cluster.mongodb.net/mydb"
对于 MongoDB Atlas,连接 URL 格式为
mongodb+srv://USERNAME:PASSWORD@CLUSTER.mongodb.net/DATABASE
自托管 MongoDB 连接 URL 格式
mongodb://USERNAME:PASSWORD@HOST:PORT/DATABASE
连接 URL 组件
USERNAME:你的数据库用户名PASSWORD:你的数据库用户密码HOST:运行mongod或mongos的主机PORT:数据库服务器运行的端口(通常为27017)DATABASE:数据库的名称
对于 MongoDB Atlas,你可以手动将数据库名称附加到连接 URL,因为 Atlas 默认不包含它。
连接问题排查
Error in connector: SCRAM failure: Authentication failed.
如果你看到 Error in connector: SCRAM failure: Authentication failed. 错误消息,可以通过在连接字符串末尾添加 ?authSource=admin 来指定身份验证的源数据库。
Raw query failed. Error code 8000 (AtlasError): empty database name not allowed.
如果你看到 Raw query failed. Code: unknown. Message: Kind: Command failed: Error code 8000 (AtlasError): empty database name not allowed. 错误消息,请务必将数据库名称附加到数据库 URL。你可以在此 GitHub 问题 中找到更多信息。
4. 内省您的数据库
运行以下命令以内省您现有的数据库
npx prisma db pull
此命令
- 从你的
.env文件中读取DATABASE_URL - 连接到你的 MongoDB 数据库
- 对集合中的文档进行采样以推断模式
- 在你的
schema.prisma文件中生成 Prisma 模型

MongoDB 自省限制:Prisma 通过对文档进行采样来对 MongoDB 进行自省。你可能需要手动
- 使用
@relation属性添加关系字段 - 如果采样未捕获所有变体,请调整字段类型
- 添加自省期间未检测到的索引和约束
5. 生成 Prisma ORM 类型
根据您内省的模式生成 Prisma Client
npx prisma generate
这会在 generated/prisma 目录中创建一个根据您的数据库模式量身定制的类型安全的 Prisma Client。
6. 实例化 Prisma Client
创建实用程序文件以实例化 Prisma Client
import "dotenv/config";
import { PrismaClient } from '../generated/prisma/client'
const prisma = new PrismaClient()
export { prisma }
7. 查询你的数据库
现在您可以使用 Prisma Client 查询您的数据库。创建一个 script.ts 文件
import { prisma } from './lib/prisma'
async function main() {
// Example: Fetch all records from a collection
// Replace 'user' with your actual model name
const allUsers = await prisma.user.findMany()
console.log('All users:', JSON.stringify(allUsers, null, 2))
}
main()
.then(async () => {
await prisma.$disconnect()
})
.catch(async (e) => {
console.error(e)
await prisma.$disconnect()
process.exit(1)
})
运行脚本
npx tsx script.ts
8. 演进你的模式
MongoDB 不支持像关系数据库那样的迁移。相反,请使用 db push 同步模式更改
8.1. 更新你的 Prisma 模式文件
使用你想要的更改修改你的 Prisma 模式文件。例如,添加一个新模型
model Post {
id String @id @default(auto()) @map("_id") @db.ObjectId
title String
content String?
published Boolean @default(false)
authorId String @db.ObjectId
author User @relation(fields: [authorId], references: [id])
}
model User {
id String @id @default(auto()) @map("_id") @db.ObjectId
email String @unique
name String?
posts Post[]
}
在 MongoDB 中,id 字段映射到 _id 并使用 @db.ObjectId 类型。关系使用带有 @db.ObjectId 注解的 String 类型。
8.2. 将更改推送到你的数据库
npx prisma db push
此命令
- 将模式更改应用于你的 MongoDB 数据库
- 自动重新生成 Prisma Client
db push 而不是迁移?MongoDB 使用灵活的模式模型。Prisma Migrate(它创建迁移文件)不支持 MongoDB。始终使用 prisma db push 同步你的模式更改。
9. 探索你的数据
你可以使用 MongoDB Atlas、MongoDB shell 或 MongoDB Compass 查看和管理你的数据。
Prisma Studio 目前不支持 MongoDB。未来版本可能会添加支持。有关更多信息,请参阅Prisma Studio 支持的数据库。
后续步骤
您已成功设置 Prisma ORM。接下来您可以探索
- 了解有关 Prisma Client 的更多信息:探索 Prisma Client API 以进行高级查询、筛选和关系操作
- 数据库迁移:了解 Prisma Migrate 以演进您的数据库模式
- 性能优化:发现查询优化技术
- 构建完整的应用程序:查看我们的框架指南,将 Prisma ORM 与 Next.js、Express 等集成
- 加入社区:在 Discord 上与其他开发者联系