Brief Intro :Telling the differences among nodejs oriented mongodb orm frameworks
- Mongoose
- Prisma
- TypeOrm
- Sequelize
Mongoose
简介
Mongoose 是对 node 环境中 MongoDB 数据库操作的封装,一个对象模型工具,将数据库中的数据转换为 JavaScript 对象以供我们在应用中使用。
使用事务
1 | const register = async () => { |
更多参考:
优点
- 上手简单,面向 nodejs 和 mongoDB 的第一选择
- 可以为文档创建一个模式结构(Schema)
- 可以对模型中的对象 / 文档进行验证
- 可以通过类型转换转换为对象模型
- 可以使用中间件来应用业务逻辑挂钩
- 比 node 原生驱动 MongoDB 更容易
Prisma
简介
Prisma 是一个开源的数据库工具链项目,帮助开发人员更快地构建应用程序并减少错误,支持 PostgreSQL、MySQL、MongoDB、SQL Server 和 SQLite。
使用事务
1 | var session = db.getMongo().startSession(); |
官方文档: How-To-Use-Transaction
优点
- 提供干净和类型安全的 API,小体积数据库查询,同时返回普通的 JS 对象,更容易进行数据库查询
- 自带 CRUD 封装、提供 VSCode 扩展插件、语法高亮、智能自动补全
- 文档详细全面,当前呼声较高,
- 支持多个数据库。在 SQL 和 NoSQL 数据库之间移动时,这对开发人员来说是一个巨大的优势,因为只需要更改 Schema 文件。所有其他操作 / 查询保持不变
- 对 TS 支持很好,当前主力维护是 ts-toolbelt 的作者 Pierre-Antoine Mills,prisma 会自动生成几乎所有的类型,会自动注入 ts-toolbelt
- 背后是商业公司维护,不存在 typeOrm 断更的情况
缺点
- 和 TypeOrm 一样,对 Mongo 的支持也停留在试验阶段
- 不支持多个模型文件。所有模型都需要写入
schema.prisma
文件,这使得文件杂乱无章,难以调试和阅读 - 目前没有嵌入式集合支持
- 目前不支持 @@id 和自增
TypeOrm
简介
TypeORM 是一个运行在 NodeJS、Browser、Cordova、PhoneGap、Ionic、React Native、Expo 和 Electron 平台上的一个 ORM 框架,可以与 TypeScript 和 JavaScript 一起使用。它的目标是始终支持最新的 JavaScript 特性并提供额外的特性以帮助你开发任何使用数据库的应用程序
支持语言
MySQL、MariaDB、PostgreSQL、SQLite、Microsoft SQL Server、sql.js、Oracle、MongoDB (试验性)、NativeScript, react-native 和 Cordova
优点
- 同时支持 ActiceRecord 和 DataMapper
- 完美集成到 NestJs 框架
- 对 TS 高度支持,简洁以及支持装饰器语法
- 参考了其他优秀 ORM 的实现,例如 Hibernate,Doctrine 和 EntityFramework
缺点
- 对 Mongo 数据库支持度是试验性的,后期支持度怎样具体不知
- 近一年多未继续维护,存在一些坑,issue 积压较多
- 没有特别完备的 API 文档,说明不清晰,只有教程和示例
Sequelize
缺点
- 不支持 Mongo,直接 pass
几种 ORM 对比
- Prisma 和 TypeOrm:https://prisma.yoga/concepts/more/comparisons/prisma-and-typeorm
- Prisma 和 Mongoose:https://prisma.yoga/concepts/more/comparisons/prisma-and-mongoose
- Prisma 和 Sequelize:https://prisma.yoga/concepts/more/comparisons/prisma-and-sequelize
其他参考
从 Mongoose 到 MongoDB 的 PrismaORM 之旅! > 使用 NestJS 和 Prisma 创建 REST API > NestJS 官网配置 Prisma > Using Prisma with MongoDB > Prisma 搭配使用 MongoDB 官方指南(中文指导版)