JavaScriptプロジェクトにおけるMongoDBのイントロスペクション
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`ファイルが作成されます
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を生成する準備が整いました。