使用 Mongoose 在 Node.js 应用程序中连接 MongoDB

介绍

在 Node.js 应用程序中,连接 MongoDB 是一个非常常见的任务。Mongoose 是一个优秀的 MongoDB 驱动程序,它提供了一系列功能强大的工具来处理 MongoDB 数据库。它支持定义 Schema(模式)、验证数据、查询和聚合等等。

在本文中,我们将学习如何使用 Mongoose 连接 MongoDB 数据库,并使用示例代码演示它的一些功能。

步骤

安装 Mongoose

要开始使用 Mongoose,你首先需要将它安装到你的 Node.js 包中。你可以使用以下 npm 命令:

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

定义 Schema

Mongoose 的核心是定义 Schema。一个 Schema 定义了一个 MongoDB 文档的结构。例如,如果我们想要保存一个用户文档,我们可以定义一个 User Schema:

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

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

在这个示例中,我们定义了一个包含 username、email 和 age 字段的 User Schema,它们分别是字符串类型、字符串类型和数字类型,其中 username 和 email 是必填项,而 age 最小值是 18,最大值是 100。

连接到 MongoDB 数据库

Mongoose 通过连接字符串连接到 MongoDB 数据库。连接字符串包含 MongoDB 数据库的主机名、端口、用户名、密码和数据库名称等信息。你可以使用以下代码连接到 MongoDB:

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

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

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

在这个示例中,我们使用 mongoose.connect() 方法连接到位于本地主机上的 myapp 数据库。使用了 useNewUrlParseruseUnifiedTopology 选项来使用 MongoDB 驱动程序的新拓展库,以避免在连接时发生警告或错误。

当成功连接到 MongoDB 时,MongoDB 将触发 open 事件,你可以在该事件中放置一些初始化代码。

创建 Model

通过定义 Schema,我们可以创建一个 Model。Model 是 Mongoose 与数据库交互的核心。Model 是与指定 collection(集合)关联的文档类,它有一个名为 collection 的属性,这个属性是由 Model 的名称复数形式表示的。

在下面的示例中,我们将 User Schema 转换为 User Model:

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

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

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

在这个示例中,我们使用 mongoose.model() 方法创建一个名为 User 的 Model,它基于我们定义的 User Schema。这个方法的第一个参数指定 Model 的名称,而第二个参数是它关联的 Schema。

CRUD 操作

使用 Mongoose,我们可以轻松地执行 CRUD(创建、读取、更新和删除)操作。

创建文档

为了创建一个文档,你可以使用 Model 的 create() 方法。下面是一个创建一个新用户文档的示例:

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

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

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

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

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

在这个示例中,我们创建了一个名为 newUser 的 User 实例,并将其保存到数据库中。在保存过程中,Mongoose 将调用验证方法检查数据的有效性。如果数据无效,它将返回一个错误。此外,它还将自动为我们赋值 _id 属性。

读取文档

用 Model 的 find() 方法来查找对应文档,如下所示:

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

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

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

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

在这个示例中,我们使用 User Model 的 find() 方法查找用户文档,并将结果以数组的形式返回到回调函数中。

你也可以在查找时应用过滤器,例如:

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

在这个示例中,我们使用了 { username: 'JohnDoe' } 对象过滤以仅获取 username 属性等于 'JohnDoe' 的文档。

更新文档

要更新文档,你可以使用 Model 的 update()findOneAndUpdate() 方法。下面是一个使用 findOneAndUpdate() 方法更新用户数据的示例:

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

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

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

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

在这个示例中,我们使用 findOneAndUpdate() 方法查找 username 等于 'JohnDoe' 的用户,将其年龄更新为 30,并返回更新的文档。

删除文档

要删除文档,你可以使用 Model 的 remove()findOneAndRemove() 方法。下面是一个使用 findOneAndRemove() 方法删除用户数据的示例:

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

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

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

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

在这个示例中,我们使用 findOneAndRemove() 方法查找 username 等于 'JohnDoe' 的用户,并将其从数据库中删除。

结论

在本文中,我们学习了如何使用 Mongoose 在 Node.js 应用程序中连接 MongoDB,并使用示例代码演示了它的一些功能。我们了解了如何定义 Schema、连接到 MongoDB、创建 Model、以及执行 CRUD 操作。

使用 Mongoose 与 MongoDB,你可以轻松地操作 MongoDB 数据库,并运用到所需的 Node.js 项目中。

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