將 Prisma ORM 加入現有的 MongoDB 專案
MongoDB 是一種熱門的基於文件的 NoSQL 資料庫,以其靈活性、可擴展性和對開發者友善的功能而聞名。在本指南中,您將學習如何將 Prisma ORM 加入現有的 TypeScript 專案、將其連接到 MongoDB、檢查現有的資料庫結構(Introspection),並開始使用型別安全的 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 專案。 - 存取具備副本集(Replica Set)部署的 MongoDB 4.2+ 伺服器。我們建議使用 MongoDB Atlas。
MongoDB 資料庫連接器使用交易(Transactions)來支援巢狀寫入。交易需要副本集(replica set)部署。部署副本集最簡單的方法是使用 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
此指令會執行以下幾個步驟:
- 建立一個包含
schema.prisma檔案的prisma/目錄,其中包含您的資料庫連接設定 - 在根目錄建立一個用於環境變數的
.env檔案 - 建立一個用於 Prisma 設定的
prisma.config.ts檔案
產生的 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 issue 中找到更多資訊。
4. 內省您的資料庫
執行下列指令來進行現有資料庫的內省(Introspect)
npx prisma db pull
此命令會
- 讀取
.env檔案中的DATABASE_URL。 - 連接到您的 MongoDB 資料庫。
- 採樣集合(Collections)中的文件以推斷結構。
- 在您的
schema.prisma檔案中產生 Prisma 模型。

MongoDB 結構檢查(Introspection)限制: Prisma 透過採樣文件來檢查 MongoDB 結構。您可能需要手動:
- 使用
@relation屬性加入關聯欄位。 - 如果採樣未能涵蓋所有變化,請調整欄位型別。
- 加入在檢查期間未偵測到的索引與約束。
5. 產生 Prisma ORM 型別
根據內省後的 Schema 產生 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. 演進您的結構(Schema)
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 型別。關聯則使用 String 型別並加上 @db.ObjectId 註解。
8.2. 將變更推送到您的資料庫
npx prisma db push
此命令會
- 將結構變更套用到您的 MongoDB 資料庫。
- 自動重新產生 Prisma Client。
db push 而不是遷移(migrations)?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 上與其他開發者交流