イントロスペクション
Prisma ORMは、指定されたデータベースに保存されているデータをサンプリングし、そのデータのスキーマを推論することでMongoDBスキーマをイントロスペクトします。
イントロスペクションを説明するために、このガイドではMongoDBをゼロからセットアップする方法を説明します。しかし、すでにMongoDBデータベースをお持ちの場合は、プロジェクトのPrisma ORMの初期化にスキップしてください。
データベースのセットアップ
これを実際に確認するには、まずblog
データベースをUser
とPost
の2つのコレクションで作成します。これらをセットアップするにはMongoDB Compassをお勧めします
まず、User
コレクションにユーザーを追加します。
次に、Post
コレクションにいくつかの投稿を追加します。userId
のObjectIDが、上で作成したユーザーと一致していることが重要です。
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を使用するようにします。
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
ファイルに書き込みます。
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
属性を追加できます。
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のイントロスペクションについては現在積極的に取り組んでいます。この機能に関するフィードバックは、こちらのissueで提供してください。
これでPrisma Clientを生成する準備ができました。