Overview
Prisma是适用于 Node.js 的开源对象关系映射器 (ORM)。它同时支持JavaScript和Typescript,但主要与Typescript一起使用,帮助您写入可读且类型安全的代码。
警告
MongoDB对Prisma ORM v7 的支持
MongoDB Node.js驾驶员尚不支持Prisma ORM 版本 7。使用MongoDB时,请使用最新可用发布6.x 的Prisma ORM。
Schemas
模式通过定义集合文档的结构,帮助开发人员避免长期出现的数据不一致问题。虽然您可以在MongoDB中在数据库级别定义模式,但Prisma允许您在应用程序级别定义模式。由于Prisma Client 可识别模式,因此使用Prisma Client 的开发人员可以访问权限自动完成的查询。
数据建模
通常,一起访问的数据应一起存储在MongoDB集合中。Prisma支持使用嵌入式文档将数据保存在一起。如果您必须将相关数据存储在单独的MongoDB集合中,则必须在一个文档的 _id字段中包含另一个文档。Prisma简化了此进程,并协助您组织这些相关数据,同时保持数据的引用完整性。
当您使用引用来对集合之间的模型关系进行建模时,您可以将 @relation 属性添加到Prisma模式中,以启用Prisma客户端能够访问权限这些关系、模拟引用操作并帮助维护引用完整性。
要学习;了解有关在MongoDB中进行高效数据建模的更多信息,请参阅MongoDB Server手册中的减少 $lookup 操作。
模式内省
MongoDB默认具有灵活模式。当您使用 prisma db pull 命令对现有MongoDB 数据库进行内省时, Prisma会从每个集合中最多采样 1000 个随机文档,以推断模式结构。
如果您的集合包含跨文档数据类型不一致的字段, Prisma会将这些字段映射到Json 类型并输出警告。这使您能够读取所有现有数据,但会降低类型安全优势。要解决此问题,您可以手动更新数据以使用一致的类型,然后再次运行prisma db pull 以使用正确的类型定义重新生成模式。有关详细信息,请参阅排查类型冲突。
Tutorial
本教程介绍如何执行以下操作:
下载Prisma应用程序示例
配置Prisma模式
创建MongoDB 数据库并使用示例数据填充
使示例应用程序与MongoDB兼容
运行应用程序。
验证先决条件
在开始本教程之前,请确保您已准备好以下组件:
已配置集群的MongoDB Atlas帐户。要查看说明,请参阅MongoDB 指南。
Node.js v16.20.1或更高版本。
下载示例应用程序
从Prisma示例存储库库克隆或下载示例应用程序。
此示例是一个使用 SQLite数据库的简单博客内容管理平台。以下步骤修改应用程序以使用MongoDB而不是 SQLite。
配置Prisma模式
导航到示例应用程序目录中的 prisma/schema.prisma文件。在此文件的 datasource db对象中,设立provider字段设置为 "mongodb",并将 url字段设置为您的Atlas连接 URI。
在同一文件的 User 模型中,将 id字段类型从 Int 更改为 String,并将默认值设立为 auto()。id属性必须映射到MongoDB _id字段。您还必须指示Prisma将此属性的数据类型设立为 ObjectId。
在 Post 模型中,对 id字段执行与在 User 模型中相同的更改。您还必须将 authorId字段类型从 Int 更改为 String,并将数据类型设立为 ObjectId。
您的 schema.prisma文件应类似于以下内容:
generator client { provider = "prisma-client-js" } datasource db { provider = "mongodb" url = "<your connection URI>" } model Post { id String (auto()) ("_id") .ObjectId createdAt DateTime (now()) updatedAt DateTime title String content String? published Boolean (false) viewCount Int (0) author User (fields: [authorId], references: [id]) authorId String .ObjectId } model User { id String (auto()) ("_id") .ObjectId email String name String? posts Post[] }
此模式在MongoDB 数据库中定义单独的 User 和 Post 集合,其中每个 Post 都包含对 User 的引用。
完成这些更改后,导航到终端中的项目目录并运行以下命令以安装必要的依赖项并生成模式:
npm install npx prisma generate
注意
如果对模式进行任何进一步更改,则必须重新运行 npx prisma generate 命令才能使更改生效。
类型冲突故障排除
如果您的MongoDB集合包含跨文档使用不一致数据类型的字段, Prisma客户端在查询与模式中的预期类型不匹配的数据时可能会抛出错误。
您可以执行以下操作来解决此问题:
运行
prisma db pull后查看Prisma模式中的警告和注释,以确定使用冲突类型的字段。更新数据,以便在集合中的所有文档中使用一致的类型。
再次运行
prisma db pull以重新生成包含更正类型的模式。
或者,如果需要保持灵活性,可以将该字段保留为 Json 类型。但是,这会降低Prisma提供的类型安全优势。
其他资源
要学习;了解有关Prisma 的更多信息,请参阅Prisma文档。
要查看和下载本教程中应用程序的完整版本,请参阅 prisma-mongodb-nextjs-example Github存储库。