前言
在 Node.js 中操作数据库是前端开发者们不可避免的任务。然而,当我们开始涉及数据库、数据模型和数据验证的时候,我们必须掌握一些专业的技能和知识。在这里,我们将了解 MongoDB,一个文档型数据库,以及我们将介绍一种流行的 Node.js 库 Mongoose。我们将探讨 Mongoose 的内部运作,主要功能以及如何使用 Mongoose 开发应用程序。
MongoDB 简介
MongoDB 是一种文档型数据库,其设计目标旨在提高可扩展性和高性能。 MongoDB 与传统的关系型数据库不同,因为它采用了一种不同的数据存储方法,其中每个记录存储为一份文档。 MongoDB 的架构非常灵活,可为多种用例提供支持。
定义一个 MongoDB 文档集合,例如存储用户的集合:
-- -------------------- ---- ------- - ----- ----- ----- ------ ---------------------- ---- --- -------- ----------- ---------- -------- - ------- ----- ----- ----- ---- ------ ---- ------- -- ------- --- ------ -
如上所示,MongoDB 使用 JSON-like 文档来表示记录。这使得它可以完美地支持 JavaScript 应用程序。
Mongoose 的内部运作
Mongoose 是一种针对 MongoDB 的 ORM(对象关系映射)。它提供了易于使用的对象模型和便利的 API,可帮助开发人员更轻松和快速地与 MongoDB 进行交互。 Mongoose 还提供了数据验证、代码优化、中间件等功能,让数据操作变得更加简单。
让我们假设我们有一个 mongoose 模型定义:
-- -------------------- ---- ------- ----- -------- - -------------------- ----- - ------ - - --------- ----- ---------- - --- -------- ----- - ----- ------- --------- ---- -- ------ - ----- ------- --------- ----- ------- ---- -- ---- - ----- ------- ---- --- ---- --- -------- -- -- -------- - ----- ------ - ---
现在,让我们看看这个模型在 Mongoose 中是如何运作的:
- 在 mongodb 中注册 model.
- 定义一个 schema,指定数据结构和验证规则。
- 调用 model() 函数创建 model。
- 使用 model 实例创建,查询,更新或删除数据。
Mongoose 的主要特性
Schema
Mongoose 用 schema 来定义文档结构。它可以包含字段定义、验证规则和默认值等信息。 Schema 将字段信息包装成对象,用于验证和处理文档数据。
Model
Mongoose 中的 model 是一个类,它允许我们创建数据库的文档(documents),通过使用指定的 schema。每个 model 对应一个 mongodb 的 collection,用于增删改查等操作。
Middleware
Mongoose 中的中间件函数允许我们在 Model 事件发生之前或之后执行自定义代码。例如,我们可以使用中间件来处理敏感数据、设置默认值或从请求头创建日志条目。
查询
Mongoose 提供了易于使用的查询 API,允许开发人员通过使用 JavaScript 对集合中的文档进行查询。在查询结果中,Mongoose 提供了一组能够满足查询需求的方法,如 find()
, findOne()
, findById()
, sort()
, skip()
, limit()
等。
Mongoose 的应用
现在我们已经了解了 Mongoose 的基本结构和特性,那么,我们如何使用它来创建一个完整的应用程序呢?在这里,我们将演示如何使用 Mongoose 连接到 MongoDB、定义 schema 和 Model、执行 CRUD 操作以及使用中间件。
首先,在项目中安装 MongoDB 和 Mongoose:
npm install mongodb mongoose
连接 MongoDB
下一步,我们需要连接 MongoDB。一个典型的连接代码如下所示:
-- -------------------- ---- ------- -- ------ --- ------- ----- -------- - -------------------- -- --- ------ ------- ------- ---------------- - --------------- ----------------------------------------------- - ---------------- ----- ------------------- ----- --------------- ---- ---------- -- - --------------------- ------------- ------------ -- - ------------------ -- ---------- -- --------- --------- ---
定义 schema 和 model
在 Mongoose 中,schema 用于定义文档的结构,而 model 用于创建 MongoDB 的文档。为了演示如何创建并保存数据,我们将创建一个用户模型,并通过给定的用户名和电子邮件输入数据。
// Define schema const userSchema = new mongoose.Schema({ name: String, email: { type: String, unique: true }, }); // Define model const User = mongoose.model('User', userSchema);
现在,我们可以通过使用 findOrUpdate() 方法处理一个用户条目:
-- -------------------- ---- ------- ---------------------- - ------ --------------------- -- -- ------ ----- - ----- ------ ------ ----------------- -- -- ----- ------ - ---- ----- ------- ---- - -- ------- - --------- -- - ---------------- -- ---------- -- - ------------------ --
使用中间件
Mongoose 中的中间件函数能够在 Model 事件发生之前或之后执行自定义代码。例如,我们可以使用中间件来处理敏感数据、设置默认值或从请求头创建日志条目。以下是一个示例 pre
中间件:
userSchema.pre('save', function(next) { const user = this; user.updated_at = new Date(); next(); });
在此示例中,我们使用 pre
中间件在保存文档之前为用户模型添加了一个 updated_at
字段。
结论
Mongoose 可以极大地降低 MongoDB 操作的开发难度。使用 Mongoose,开发人员可以通过一个简单、明确的 API 轻松定义 models、schema 和中间件,并且可以使用查询 API 轻松处理文档。本文介绍了 Mongoose 中的一些核心概念,包括 schema、model、middleware 和查询 API,还演示了如何连接 MongoDB 并使用 Mongoose 创建文档和查询数据。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67319d010bc820c5823974c0