メインコンテンツへスキップ

イントロスペクション

Prisma ORMは、指定されたデータベースに保存されているデータをサンプリングし、そのデータのスキーマを推測することで、MongoDBスキーマをイントロスペクトします。

イントロスペクションを示す目的で、このガイドではMongoDBをゼロからセットアップする手順を説明します。すでにMongoDBデータベースをお持ちの場合は、プロジェクトのPrisma ORMの初期化に直接進んでください。

データベースの設定

実際に動作させるには、まず2つのコレクション (UserPost) を持つ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"
}

次に、DATABASE_URLがMongoDBデータベースを指すように.envファイルを調整する必要があります。

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のイントロスペクションに積極的に取り組んでいます。この機能に関するフィードバックはこちらのissueで提供してください。

これで、Prisma Clientを生成する準備ができました。