Mongoose 是一款行业领先的 Node.js ORM(对象关系映射)库,它提供了丰富的 API 以进行 MongoDB 的数据操作。随着版本的不断升级,Mongoose API 的变化也愈发频繁,因此在迁移版本时,我们需要了解新版本的变化以及如何迁移我们的代码。
本篇文章主要介绍 Mongoose 5 版本的更新迁移指南,旨在为前端开发者提供详细的说明和指导。
1. npm 包的更新
自 Mongoose 5 版本发布后,与原有版本的不兼容差异变化比较大,因此我们需要格外注意更新 npm 包的版本。
在 package.json 文件中,将 mongoose 的版本更新为 ^5.0.0。这将允许您在未来的补丁版本中接受更改,但仅在主要版本之间更新。
"dependencies": { "mongoose": "^5.0.0" }
更新完 package.json 文件后,执行以下命令安装最新的 Mongoose 版本:
npm install
2. 连接 MongoDB 数据库
在 Mongoose 5 版本中,mongoose.createConnection()
方法和 mongoose.connect()
方法之间的语义区别更加明显。
以前版本的 Mongoose 中,mongoose.connect()
方法将通过默认的 mongodb://localhost:27017 连接到 MongoDB 数据库。而在 Mongoose 5 版本中,mongoose.createConnection()
方法与 mongoose.connect()
方法的区别不再仅仅是一个返回 Promise,而是有深度的语义区别。
具体来说,mongoose.createConnection()
方法创建了一个独立的连接,您可以使用该连接避免在环境(如测试)之间共享状态。也就是说,它允许我们在同一个进程中打开多个数据库连接。
在新版本中,应该使用 mongoose.createConnection()
方法连接数据库:
-- -------------------- ---- ------- ----- -------- - -------------------- ----- --- - --------------------------------------------- ----- -- - ------------------------------ - ---------------- ----- ------------------- ---- --- ------------------ -- -- - --------------------- ---------- ------ -- --------- --- -------------- ------- -- - --------------------- ---------- ------ ----------- --- --------------------- -- -- - --------------------- ---------- --------- --- -------------------- -- -- - ----------- -- - --------------------- ---------- ------ --- -- --- -------------- ---------------- --- ---展开代码
其中有几点需要注意:
useNewUrlParser
选项是必须的,否则会出现找不到服务器的问题。useUnifiedTopology
选项已经被强制为 true,并且已成为默认值。
3. Schema 类型
Mongoose 5 版本的 Schema 类型有了一些变化。在早期的版本中,我们可以使用 String、Number、Date 等内置的 Schema 类型,或者通过 mongoose.Schema.types.XXX 使用较常用的类型。
现在,在 Mongoose 5 中,这些类型本质上已经被移除了。Mongoose 统一了数据类型的表示方式,并导出了一个名为 SchemaTypes
的集合,其中包括了所有可用的 Schema 类型。您可以像下面这样将其作为模块化导入:
const { Schema, SchemaTypes } = require('mongoose');
在 Schema 中,您应该使用 Schema.Types.XXX
(例如 Schema.Types.String
)来指定 Schema 记录字段的数据类型。
下面是一个示例:
-- -------------------- ---- ------- ----- ---------- - --- -------- ----- - ----- ------------------- --------- ---- -- ---- - ----- ------------------- -------- -- -- ---------- - ----- ----------------- -------- -------- -- ------ ------------------ --- ----- ---- - ---------------- ------------展开代码
请注意,您还可以使用简写 Schema.XXX
,该简写等同于 Schema.Types.XXX
,示例代码如下:
-- -------------------- ---- ------- ----- ---------- - --- -------- ----- - ----- ------- -- ------------- --------- ---- -- ---- - ----- ------- -- ------------- -------- -- -- ---------- - ----- ----- -- ----------- -------- -------- -- ------ ------ -- ------------- ---展开代码
使用上述代码定义 schema 后,可以像下面这样使用它来创建 model:
const User = db.model('User', userSchema);
4. 聚合查询
在 Mongoose 5 版本中,最大的一项功能改进是在聚合查询方面。聚合查询是一种强大的方式,可以在大量数据中获取有用信息。它是用于数据处理的批量操作,可以与数据库中的不同文档一起使用。
在 Mongoose 以前的版本中,可以使用 mongoose.aggregate()
方法执行聚合查询操作。
例如:
const pipeline = [{ $match: { active: true } }, { $group: { _id: "$customer", total: { $sum: "$amount" } } }]; const result = await Invoice.aggregate(pipeline);
在 Mongoose 5 版本中,要执行聚合查询,可以使用 model.aggregate()
。
例如:
const pipeline = [{ $match: { active: true } }, { $group: { _id: "$customer", total: { $sum: "$amount" } } }]; const result = await Invoice.aggregate(pipeline).exec();
请注意,在使用新的 model.aggregate()
方法时,您需要使用 .exec()
方法来进行回调处理。
另外,在 Mongoose 5 中,也增强了聚合查询的查询速度,以外,还提供了更好的查询优化功能。因此,聚合查询的开发可变得更加流畅、高效和强大。
5. 结语
Mongoose 5 版本的更新迁移指南到此结束。本篇文章希望能够提供有关新版本的知识,详细解释了它的每一个变化,并通过示例代码展示了具体的使用方法。
通过这篇文章,您应该可以非常快速地了解 Mongoose 5 的主要改进和变化。我们也希望它能够成为您构建更高质量的 MongoDB 应用程序的指南和参考。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67bee94a0c976d473a341800