MongoDB.local SF, Jan 15: See the speaker lineup & ship your AI vision faster. Use WEB50 to save 50%
Find out more >
Docs Menu
Docs Home
/ /

チュートリアル: プリズマとの統合

プリズマは、 Node.js用のオープンソースのオブジェクト関係マッパー(ORM)です。 JavaScriptとTypescript の両方をサポートしていますが、読み取り可能で型安全なコードを書込むためにTypescriptと主に使用されます。

警告

Prisma ORM v7 の MongoDB サポート

MongoDB Node.jsドライバーはまだPrisma ORM バージョン 7 をサポートしていません。MongoDBを使用する場合は、Prisma ORM の利用可能な最新バージョン 6.x リリースを使用します。

スキーマは、コレクションのドキュメントの構造を定義することで、開発者が時間の経過とともにデータの不整合を回避するのに役立ちます。MongoDB内ではデータベースレベルでスキーマを定義できますが、 プリズマ を使用するとアプリケーションレベルでスキーマを定義できます。 プリズマ Client はスキーマを認識しているため、 プリズマ Client を使用する開発者はクエリをオートコンプリートするアクセス権を持ちます。

一般に、まとめてアクセスされるデータは、 MongoDBコレクションにまとめて保存する必要があります。プリズマ は、埋め込みドキュメントを使用してデータを保持することをサポートしています。 関連データを別々のMongoDBコレクションに保存する必要があるユースケースでは、あるドキュメントの _idフィールドを別のドキュメントに含める必要があります。プリズマ はこのプロセスを効率化し、データの参照整合性を維持すると同時に、この関連データの整理を支援します。

参照を使用してコレクション間の関係をモデル化する場合、Prisma スキーマに @relation 属性を追加して、Prisma クライアントがそれらの関係にアクセスし、参照アクションをエミュレートして、参照の整合性を維持できるようにします。

MongoDBでの効率的なデータ モデリングの詳細については、 MongoDB Serverマニュアルの $lookup 操作の削減 を参照してください。

MongoDBにはデフォルトのフレキシブルなスキーマがあります。prisma db pull コマンドを使用して既存のMongoDBデータベースを内部検証すると、Prismaは各コレクションから最大 1000 のランダムなドキュメントをサンプルしてスキーマ構造を推測します。

ドキュメント間でデータ型が一致しないフィールドがコレクションに含まれる場合、PrismaはそれらのフィールドをJsonタイプにマッピングし、警告を出力します。これにより、既存のすべてのデータを読み取ることができますが、型の安全性の利点は低下します。これを解決するには、コンシステントなタイプを使用するようにデータを手動で更新し、prisma db pull を再度実行することで、適切なタイプ定義でスキーマを再生成します。詳細については、型競合のトラブルシューティングを参照してください。

このチュートリアルでは、次のアクションを実行する方法について説明します。

  • プリズマアプリケーションの例をダウンロード

  • プリズマスキーマを設定する

  • MongoDBデータベースを作成し、サンプルデータを入力する

  • 例アプリケーションをMongoDBと互換性を持たせるために

  • アプリケーションを実行する

1

このチュートリアルを開始する前に、次のコンポーネントが準備されていることを確認してください。

  • 構成されたクラスターを持つMongoDB Atlasアカウント。手順を表示するには、MongoDB Get Started ガイドを参照してください。

  • Node.js v16.20.1以降に更新します。

2

プリズマ例リポジトリから例アプリケーションを複製またはダウンロードします。

この例では、 SQLiteデータベースを使用する単純なブログ コンテンツ管理プラットフォームです。次の手順では、SQLite の代わりにMongoDBを使用するようにアプリケーションを変更します。

3

例アプリケーションディレクトリ内の prisma/schema.prismaファイルに移動します。このファイルの datasource dbオブジェクトで、providerフィールドを "mongodb" に設定し、urlフィールドをAtlas 接続 URI に設定します。

同じファイルの User モデルで、idフィールドタイプを Int から String に変更し、デフォルト値を auto() に設定します。idプロパティはMongoDB _idフィールドにマッピングする必要があります。このプロパティのデータ型を ObjectId に設定するようにプリズマを指示する必要があります。

Post モデルで、User モデルで実行したのと同じ変更を idフィールドに実行します。また、authorIdフィールドタイプを Int から String に変更し、データ型をObjectId に設定する必要があります。

schema.prismaファイルは次のようになります。

generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "mongodb"
url = "<your connection URI>"
}
model Post {
id String @id @default(auto()) @map("_id") @db.ObjectId
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
title String
content String?
published Boolean @default(false)
viewCount Int @default(0)
author User @relation(fields: [authorId], references: [id])
authorId String @db.ObjectId
}
model User {
id String @id @default(auto()) @map("_id") @db.ObjectId
email String @unique
name String?
posts Post[]
}

このスキーマは、 MongoDBデータベース内に個別の User コレクションと Post コレクションを定義します。各 Post には User への参照が含まれています。

これらの変更を加えたら、ターミナルのプロジェクトディレクトリに移動し、次のコマンドを実行して必要な依存関係をインストールし、スキーマを生成します。

npm install
npx prisma generate

注意

スキーマにさらに変更を加える場合、変更を有効にするには npx prisma generate コマンドを再実行する必要があります。

4

データベースにサンプルデータを入力するには、次のコマンドを実行中例プロジェクト内の prisma/seed.tsファイルを実行します。

npx prisma db seed

これにより、schema.prismaファイルで定義されているように User コレクションと Post コレクションが作成され、サンプルデータが入力されます。

5

例プロジェクトの srcディレクトリに移動します。pages/api/post/[id].ts ファイルと pages/api/publish/[id].ts ファイルで、Number(postId) のすべてのインスタンスを postId に置き換えます。これが必要になるのは、スキーマ内の id フィールドが Int ではなく String 型になっているためです。

6

アプリケーションを起動するには、プロジェクトディレクトリから次のコマンドを実行します。

npm run dev

アプリケーションを表示および実行するには、ウェブ ブラウザで http://localhost:3000 に移動します。アプリケーションを使用して、ブログ投稿を作成、下書き、公開、削除できます。APIルートの定義は、例プロジェクトの pages/api フォルダーで参照できます。

MongoDBコレクションに、ドキュメント間で一貫性のないデータ型を使用するフィールドが含まれている場合、スキーマに期待される型と一致しないデータをクエリすると、Prisma クライアントはエラーをスローする可能性があります。

これに対処するために、次のアクションを実行できます。

  1. prisma db pullを実行した後にPrismaスキーマの警告とコメントを検討し、競合するタイプを使用するフィールドを特定します。

  2. コレクション内のすべてのドキュメントでコンシステントなタイプを使用するようにデータを更新。

  3. prisma db pull を再度実行するして、修正されたタイプを含むスキーマを再生成します。

あるいは、柔軟性を維持する必要がある場合は、フィールドをタイプ Json のままにすることもできます。ただし、これによりPrismaが提供する型の安全性の利点が低下します。

プリズマの詳細については、プリズマ のドキュメント を参照してください。

このチュートリアルのアプリケーションの完全なバージョンを表示およびダウンロードするには、 presma-mongodb-nextjs-example Githubリポジトリ を参照してください。

戻る

Mongooseを使い始める