Mongoose-- 基础篇(一)

阅读时长 6 分钟读完

在现代 Web 开发中,涉及到的大多数应用程序需要数据库支持。实现便捷而高效的访问数据库的方式就是使用 Mongoose。Mongoose 是一种基于 Node.js 平台的 MongoDB 库,提供了对 MongoDB 的数据模型声明式定义、查询、校验等功能。本篇文章将会介绍 Mongoose 的基础知识,并提供一些实际案例。

安装 Mongoose

在开始前,需要确保本地已经成功安装了 Node.js 和 MongoDB。如果尚未安装,可以参考官方网站的文档进行安装。

安装 Mongoose 的命令行工具,使用以下命令:

npm install mongoose

当安装完成后,就可以在项目中导入 Mongoose 了:

const mongoose = require('mongoose')

连接到 MongoDB

要使用 Mongoose 连接到 MongoDB,需要提供 MongoDB 实例的 URL。可以使用以下命令创建 Mongoose 的连接:

这个代码片段使用了 mongoose.connect() 方法来连接到本地 MongoDB 实例,其中第一个参数是 MongoDB 实例的 URL,第二个是对象的参数包含其它各种选项。在这种情况下,我们通过设置 useNewUrlParseruseUnifiedTopology 来控制 MongoDB 驱动程序的行为。

使用 Mongoose 连接到 MongoDB 后,可以通过 mongoose.connection 类获取到连接。

定义模式

Mongoose 提供了一个 Schema 类来定义 MongoDB 中的数据模型。每个 schema 中可以包含属性和方法,可以设置 default、validate、unique 等属性,也可以嵌套其他 schema。以下是一个简单的示例:

这个代码片段创建了一个 BookSchema 对象,它有三个属性: titleauthordate。其中 titledate 属性分别是 String 和 Date 类型,并且 title 属性必须设置为 requiredunique

对于嵌套的 schema,可以使用以下方法:

定义模型

通过一个 schema 可以创建多个 Model,每个 model 对应一个 MongoDB 集合,Model 的每个实例对应集合中的一条数据。以下是一个创建 model 的例子:

这个代码片段创建了一个名为 "Book" 的 model。Model 通过使用 Mongoose API 将模型映射到 MongoDB 集合。

创建文档

模型定义后,就可以使用模型创建文档并将其保存到 MongoDB 中了。以下是一个简单的写入新书籍的示例:

这个代码片段创建了一个新的 Book 文档并将其保存到 MongoDB 中。Mongoose 会自动为新文档分配一个 _id 属性,并将其添加到 Book 集合中。

查询

Mongoose 的查询 API 相当丰富,这是因为 Mongoose 建立在 MongoDB 驱动程序之上,后者本身提供了很多强大的查询功能。

以下是一些简单的示例:

这里使用的是 Mongoose 的 Model API,它返回一个普通的 JavaScript Promise。

更新文档

可以使用 Model.updateOne 或 Model.updateMany 方法来更新文档。例如,以下示例将更新具有给定 ID 的图书的 title 属性:

这个代码片段使用 updateOne() 方法,它将查询 _id 值为 123 的书籍,并将其 title 属性设置为 "New Title"。

删除文档

使用 Model.deleteOne 或 Model.deleteMany 方法来从 MongoDB 中删除文档。

以下是一个简单的例子:

这个代码片段删除 MongoDB 中的所有 title 属性为 JavaScript for Dummies 的文档。

以上是 Mongoose 的基础知识介绍,包括连接到 MongoDB、定义模式、定义模型、创建文档、查询、更新文档和删除文档。

总结

Mongoose 使得在 Node.js 应用程序中访问 MongoDB 变得容易和高效。本文介绍了 Mongoose 的基础知识、学习以及指导意义,并通过一些简单而实用的代码示例展示了 Mongoose API 的一些主要方面。要使用 Mongoose 完整的功能,需要深入学习其 API,例如查询嵌套文档、生命周期钩子、中间件、事务等。建议大家使用 Mongoose,提高代码效率并使工作更加便捷、高效。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64b36b0748841e9894faf9c9

纠错
反馈

纠错反馈