Mongoose 技术内幕:深入理解 Mongoose、MongoDB 和 Node.js

前言

在 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 中是如何运作的:

  1. 在 mongodb 中注册 model.
  2. 定义一个 schema,指定数据结构和验证规则。
  3. 调用 model() 函数创建 model。
  4. 使用 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:

--- ------- ------- --------

连接 MongoDB

下一步,我们需要连接 MongoDB。一个典型的连接代码如下所示:

-- ------ --- -------
----- -------- - --------------------

-- --- ------ ------- -------
---------------- - ---------------

----------------------------------------------- -
    ---------------- -----
    ------------------- -----
    --------------- ----
---------- -- -
    --------------------- -------------
------------ -- -
    ------------------ -- ---------- -- --------- ---------
---

定义 schema 和 model

在 Mongoose 中,schema 用于定义文档的结构,而 model 用于创建 MongoDB 的文档。为了演示如何创建并保存数据,我们将创建一个用户模型,并通过给定的用户名和电子邮件输入数据。

-- ------ ------
----- ---------- - --- -----------------
    ----- -------
    ------ - ----- ------- ------- ---- --
---

-- ------ -----
----- ---- - ---------------------- ------------

现在,我们可以通过使用 findOrUpdate() 方法处理一个用户条目:

----------------------
   - ------ --------------------- --          -- ------ -----
   - ----- ------ ------ ----------------- -- -- ----- ------
   - ---- ----- ------- ---- -                 -- -------
-
--------- -- -
   ----------------
--
---------- -- -
   ------------------
--

使用中间件

Mongoose 中的中间件函数能够在 Model 事件发生之前或之后执行自定义代码。例如,我们可以使用中间件来处理敏感数据、设置默认值或从请求头创建日志条目。以下是一个示例 pre 中间件:

---------------------- -------------- -
  ----- ---- - -----
  --------------- - --- -------
  -------
---

在此示例中,我们使用 pre 中间件在保存文档之前为用户模型添加了一个 updated_at 字段。

结论

Mongoose 可以极大地降低 MongoDB 操作的开发难度。使用 Mongoose,开发人员可以通过一个简单、明确的 API 轻松定义 models、schema 和中间件,并且可以使用查询 API 轻松处理文档。本文介绍了 Mongoose 中的一些核心概念,包括 schema、model、middleware 和查询 API,还演示了如何连接 MongoDB 并使用 Mongoose 创建文档和查询数据。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/67319d010bc820c5823974c0