使用 Mongoose 在 Node.js 中实现 MongoDB 数据库的 CURD 操作

前言

MongoDB 是一种非关系型数据库,它采用文档存储结构,适合存储大量非结构化数据,比如 Web 应用程序中的数据。而 Node.js 作为 JavaScript 运行的环境,有着快速高效的特点,适合用于搭建 Web 服务器,因此,在 Node.js 应用程序中操作 MongoDB 数据库是一种非常常见的应用场景。而 Mongoose 则是一个非常好用的 MongoDB 操作库,提供了更简单、更直观的 API,大幅降低了操作 MongoDB 的难度。

本文将介绍如何在 Node.js 应用程序中使用 Mongoose 操作 MongoDB 数据库的 CURD 操作,并会提供示例代码。

CURD 操作

在数据库操作中,CURD 即 Create(创建)、Update(更新)、Read(读取)、Delete(删除)。

  • Create(创建): 插入数据到指定的集合
  • Update(更新): 更新集合中的数据
  • Read(读取): 读取集合中的数据
  • Delete(删除): 删除集合中的指定数据

安装 Mongoose

在 Node.js 应用程序中使用 Mongoose 操作 MongoDB 数据库,需要首先安装 Mongoose。使用 npm 命令行工具安装,命令如下:

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

连接 MongoDB

在使用 Mongoose 操作 MongoDB 数据库前,需要首先连接 MongoDB 数据库。连接操作需要在 Node.js 应用程序的启动文件中进行配置。

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

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

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

在上述示例中,通过 mongoose.connect 方法连接 MongoDB 数据库。其中,第一个参数是 MongoDB 数据库的地址(mongodb://localhost/test),第二个参数是一个配置对象, 目前指定了 useNewUrlParser: true,这个配置项是为了避免 Node.js 应用程序连接 MongoDB 时出现警告。如果省略这个配置项,可能会在应用程序启动时看到如下警告:DeprecationWarning: current URL string parser is deprecated, and will be removed in a future version. To use the new parser, pass option { useNewUrlParser: true } to MongoClient.connect.

连接成功后,会触发 db.once('open') 事件,表示 MongoDB 数据库已经连接成功。

定义数据模型 Schema

在使用 Mongoose 操作 MongoDB 数据库时,需要首先定义数据模型 Schema。Schema 是用来定义数据的结构、类型、验证等信息,直接映射到 MongoDB 集合(collection)上。

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

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

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

在上述示例中,我们通过 Mongoose 的 Schema 方法定义了一个用户数据模型 Schema,并定义了三个数据字段分别为 nameageemail

mongoose.model('User', User) 方法定义了一个名为 User 的数据模型,并将其映射到 MongoDB 集合 users 上。这里的 User 字符串对应于集合名称,而 User 作为第二个参数对应于之前定义的数据模型 Schema。

Create(创建)操作

在 Mongoose 中进行 Create(创建)操作很简单,只需要使用数据模型的 create 方法。

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

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

在上述示例中,我们通过 User.create 方法新增了一个名为 Tom 的用户。

Read(读取)操作

在 Mongoose 中进行 Read(读取)操作有两种方式,一种是使用数据模型的 find 方法,一种是使用数据模型的 findOne 方法。

find 方法

使用 find 方法可以查询出一个集合中所有符合条件的文档。

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

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

在上述示例中,我们通过 User.find 方法查询了集合中的所有用户,并在查询完成后输出了所有用户的信息。

findOne 方法

使用 findOne 方法可以查询出一个集合中符合条件的第一个文档。

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

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

在上述示例中,我们通过 User.findOne 方法查询了集合中名为 Tom 的第一个用户,并在查询完成后输出了该用户的信息。

Update(更新)操作

在 Mongoose 中进行 Update(更新)操作很简单,只需要使用数据模型的 updateOneupdateManyfindOneAndUpdate 方法。

updateOne 方法

使用 updateOne 方法可以更新集合中符合条件的第一个文档。

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

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

在上述示例中,我们通过 User.updateOne 方法更新集合中名为 Tom 的第一个用户的年龄为 26。

updateMany 方法

使用 updateMany 方法可以更新集合中符合条件的所有文档。

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

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

在上述示例中,我们通过 User.updateMany 方法更新集合中名为 Tom 的所有用户的年龄为 27。

findOneAndUpdate 方法

使用 findOneAndUpdate 方法可以更新集合中符合条件的第一个文档,并返回更新前的文档。

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

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

在上述示例中,我们通过 User.findOneAndUpdate 方法更新集合中名为 Tom 的第一个用户的年龄为 28,并返回更新前的用户信息。

Delete(删除)操作

在 Mongoose 中进行 Delete(删除)操作很简单,只需要使用数据模型的 deleteOnedeleteManyfindOneAndDelete 方法。

deleteOne 方法

使用 deleteOne 方法可以删除集合中符合条件的第一个文档。

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

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

在上述示例中,我们通过 User.deleteOne 方法删除集合中名为 Tom 的第一个用户。

deleteMany 方法

使用 deleteMany 方法可以删除集合中符合条件的所有文档。

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

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

在上述示例中,我们通过 User.deleteMany 方法删除集合中名为 Tom 的所有用户。

findOneAndDelete 方法

使用 findOneAndDelete 方法可以删除集合中符合条件的第一个文档,并返回删除前的文档。

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

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

在上述示例中,我们通过 User.findOneAndDelete 方法删除集合中名为 Tom 的第一个用户,并返回删除前的用户信息。

总结

通过以上示例代码,我们可以看到,在 Node.js 应用程序中使用 Mongoose 操作 MongoDB 数据库实现 CURD 操作非常简单。感兴趣的读者可以尝试在自己的应用程序中使用 Mongoose 操作 MongoDB 数据库。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/64c5fa9995c405902ee4686a


猜你喜欢

  • ES12 中新的对象方法:Object.fromEntries()

    在 ES12 中,有一个新的对象方法叫做 Object.fromEntries(),其作用是将一个键值对数组转换成一个对象。这个方法可以帮助我们轻松地将一些数据结构转换成一个对象。

    1 年前
  • 使用 Jest 测试 Vue 应用:最佳实践

    Vue.js 是目前最流行的前端框架之一,能够帮助开发者快速构建交互式的 Web 应用程序。在 Vuejs 中,测试是非常重要的一部分。它不仅可以保证代码的质量,还可以提高开发效率。

    1 年前
  • Cypress 测试如何使用环境变量进行参数化

    Cypress 是一个流行的前端自动化测试框架。在测试过程中,经常需要使用参数化测试来模拟不同的测试场景和测试数据。Cypress 提供了多种方式进行参数化,其中使用环境变量是一种方便实用的方式。

    1 年前
  • CSS Reset 优化技巧 —— 添加特殊样式

    在网页开发中,CSS Reset 是一种常见的技术手段,用于消除不同浏览器之间的默认样式差异。但是,在使用 CSS Reset 的过程中,有时候会造成部分样式的丢失或者变形。

    1 年前
  • SASS 中的关于选择器的知识

    SASS 中的关于选择器的知识 SASS 是一款强大的 CSS 预处理器,能够帮助前端开发者更加轻松地管理和维护 CSS 代码。在 SASS 中,选择器是非常重要的知识点,因为一个好的选择器可以使得 ...

    1 年前
  • 使用 ES7 的 async/await 实现音频播放器

    在 Web 开发领域中,前端技术一直都是不断更新迭代的。近年来,ES7 的 async/await 函数功能已经成为越来越受欢迎的前端技术。其特点是可以让异步代码看起来像同步代码,让代码结构更加清晰,...

    1 年前
  • Babel 如何编译 ES6 模块的命名导出语法

    前言 ES6 是 JavaScript 的第六个版本,也被称为 ECMAScript 2015,这个版本增加了许多新功能,其中一个被广泛使用的新功能就是模块化。ES6 模块化可以使用 import 和...

    1 年前
  • JVM 调优性能优化实践

    在前端开发过程中,我们常常需要遇到 JVM 的性能问题。为此,我们需要进行 JVM 的调优和性能优化,以保证应用的稳定性和高效性。本文将介绍 JVM 调优的实践,包括堆内存调整、垃圾回收、并发线程数和...

    1 年前
  • ES8 的新特性:Promise.probing() 方法的使用以及解析

    ES8 的新特性:Promise.probing() 方法的使用以及解析 随着前端技术的不断发展,Promise 成为了一种广泛应用于异步编程的解决方案。而在 ES8 中,Promise.probin...

    1 年前
  • 遇到 RESTful API 请求返回 401 错误的解决方法

    RESTful API 是一种基于 HTTP 协议实现的 Web API,广泛用于前端和后端之间的数据传输,它规定了一组固定的请求和响应规范,为前后端之间的通信提供了方便和可靠的方式。

    1 年前
  • Material Design 中的 ToolBar

    简介 ToolBar 是 Google Material Design 风格中常用的 UI 组件,它主要用于 app 和 web 应用中的导航和操作控制。一个好的 ToolBar 可以增强用户体验,提...

    1 年前
  • Fastify框架中实现WebSocket心跳检测与重连

    WebSocket是实现服务器和客户端之间双向实时通信的一种技术,而Fastify是基于Node.js的一个快速、低开销、web框架。本文主要介绍在Fastify框架中如何实现WebSocket的心跳...

    1 年前
  • ES10 新增特性详解:Optional Chaining 可选链操作符

    在前端开发中我们经常需要操作对象的属性,但有时候对于嵌套对象的属性判断却很麻烦。此时,我们需要用到 ES10 新增的可选链操作符。 可选链操作符可以在不确定对象属性是否存在的情况下,安全地访问这些属性...

    1 年前
  • 在 Express.js 中使用 Passport.js 实现 Google 登录功能

    简介 在现代 Web 应用中实现用户登录和认证是很常见的需求,为了简化和标准化这个过程,已经有很多流行的第三方认证服务。其中,Google 是被广泛使用和信赖的服务之一,因为它提供了强大的用户管理和数...

    1 年前
  • 利用 pm2 实现 Node.js logger 方案

    Node.js 是一门非常流行的服务器端 JavaScript 运行环境,而 logger(日志记录器)是每个 Node.js 应用都需要的一个非常重要的组件。logger 可以帮助我们记录程序运行中...

    1 年前
  • 使用 Custom Elements 实现移动端 UI 组件的技巧

    简介 Custom Elements 是 Web Components 规范中的一个重要部分,它允许开发者自定义 HTML 标签,为 HTML 新增具有自定义行为和样式的组件,这个特性可以在移动端 U...

    1 年前
  • Kubernetes 中部署 StatefulSet 实现高可用 MySQL 的方案

    前言 在现代化的应用架构中,一般都会采用微服务架构,每个微服务都需要一个可靠、可扩展的数据存储系统。而 MySQL 作为开源的关系型数据库,在业内有着广泛的应用。在 Kubernetes 集群中部署 ...

    1 年前
  • 在 Koa 框架中使用 GraphQL 进行数据查询

    前言 GraphQL 是一个新兴的数据查询语言,并且在前端开发领域中越来越受欢迎。它提供了更加灵活的数据查询方式,可以减少网络请求次数,同时也可以帮助开发者更加清晰地定义数据结构和查询方式。

    1 年前
  • Tailwind 常用的 CSS 包装器:详解 @apply 指令

    Tailwind 是一款非常受欢迎的 CSS 框架,它提供了一套丰富的 CSS 类,可以帮助我们快速构建出漂亮的页面布局和样式。但是,在使用 Tailwind 时,我们经常会遇到需要重复书写一些相似的...

    1 年前
  • 解决 Deno 中引入的模块无法正确加载导致程序中断的问题

    引言 Deno 是一个正在快速增长的新型 JavaScript 和 TypeScript 运行时环境,它具有许多优秀的功能。然而,在使用 Deno 时,可能会遇到类似“模块无法正确加载”的问题,这可能...

    1 年前

相关推荐

    暂无文章