介绍
在 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 数据库。使用了 useNewUrlParser
和 useUnifiedTopology
选项来使用 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