Mongoose 中使用 mongoose-ttl 实现 TTL 自动删除过期数据

在开发 Web 应用时,我们经常需要存储一些临时数据,例如用户的登录状态、验证码等。这些数据有一个共同的特点,就是它们都有一个有效期,在有效期过后就不再有用,甚至有可能会带来安全风险。为了避免这种情况的发生,我们可以使用 TTL(Time To Live)机制来自动删除过期数据。在 MongoDB 中,我们可以使用 mongoose-ttl 插件来实现这个功能。

安装 mongoose-ttl

首先,我们需要安装 mongoose-ttl 插件。在终端中执行以下命令:

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

使用 mongoose-ttl

使用 mongoose-ttl 很简单,我们只需要在定义 Schema 时添加 expires 字段,指定数据的有效期即可。例如,我们要存储一个验证码,有效期为 5 分钟,可以这样定义 Schema:

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

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

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

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

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

在上面的代码中,expires 字段指定了数据的有效期为 5 分钟。mongoose-ttl 插件会自动将这个字段转换为 TTL 索引,当数据过期时自动删除。

示例代码

下面是一个完整的示例,演示了如何使用 mongoose-ttl 存储验证码,并在过期后自动删除:

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

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

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

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

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

在上面的代码中,我们先连接到 MongoDB,然后生成一个 6 位数的验证码,并存储到数据库中。然后等待 1 分钟后,再查询该验证码是否还存在。由于验证码的有效期为 5 分钟,如果它还存在,说明自动删除功能没有生效。如果它已经被删除,说明自动删除功能生效了。

总结

使用 mongoose-ttl 插件可以很方便地实现 TTL 自动删除过期数据的功能。在实际开发中,我们可以将它应用于各种临时数据的存储,提高应用的安全性和可靠性。

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


猜你喜欢

  • Jest - 使用 Nock 的测试来模拟 HTTP 请求

    在前端开发中,我们经常需要与后端服务器进行通信,获取数据或者提交表单等操作。而这些操作需要依赖于 HTTP 请求,因此对于前端开发人员来说,如何测试这些请求是非常重要的。

    1 年前
  • LESS 中现有样式继承带来的问题及解决方案

    LESS 是一种 CSS 预处理器,它为开发者提供了更加方便的方式来编写 CSS。其中,样式继承是 LESS 中的一个重要特性,它可以让开发者更加高效地编写 CSS。

    1 年前
  • Material Design 实现倒计时效果的详细教程及实现

    Material Design 是 Google 推出的一种设计语言,它的设计原则是简洁、直观、有层次感、有动态效果。其中,倒计时效果是 Material Design 中经常使用的效果之一,本文将详...

    1 年前
  • ECMAScript 2019: 使用 catch() 捕获 Promise 值和错误

    Promise 是 JavaScript 中处理异步操作的一种方式,它允许我们在异步操作完成后执行一些代码。在以前的版本中,我们只能使用 then() 方法来处理 Promise 的结果,但是在 EC...

    1 年前
  • 如何保证 Socket.io 消息的可靠性

    在现代 Web 应用程序中,实时通信已经成为了不可或缺的一部分。Socket.io 是一个流行的 JavaScript 库,它提供了一个简单易用的 API,用于实现实时通信。

    1 年前
  • 响应式设计中如何解决移动端轮播图问题

    在现代的移动设备上,轮播图已经成为了一个常见的交互元素。然而,由于移动设备的屏幕尺寸和分辨率的多样性,轮播图在不同设备上的显示效果和交互体验可能存在很大的差异。本文将介绍在响应式设计中如何解决移动端轮...

    1 年前
  • 解决 Chai 和 Jest 集成出错问题

    在前端开发中,测试是一个非常重要的环节。Chai 和 Jest 是两个常用的测试框架,它们在测试过程中可以互相集成,但有时候集成会出现一些问题。本文将介绍如何解决 Chai 和 Jest 集成出错的问...

    1 年前
  • 在 GraphQL 中使用 Union 类型的最佳实践

    GraphQL 是一种用于 API 的查询语言,它提供了一种更加灵活和高效的方式来定义 API 的数据结构和查询方式。在 GraphQL 中,Union 类型是一种常用的数据类型,它可以将不同类型的对...

    1 年前
  • Cypress 测试管理工具:Cypress Dashboard

    Cypress 是一个流行的前端测试框架,它提供了易于使用的 API 和强大的调试工具,可以帮助开发者编写高质量的端到端测试。然而,当测试用例数量增加时,手动管理测试结果和日志变得困难。

    1 年前
  • Mongoose 中使用 mongoose-json-schema 进行 JSON 数据的存储和查询

    在前端开发中,我们经常需要使用数据库来存储和查询数据。而 MongoDB 是一个非常流行的 NoSQL 数据库,而 Mongoose 则是一个 Node.js 的 MongoDB ORM 库,它可以使...

    1 年前
  • 小心使用可选链式调用可以避免 ES11 的 TypeError

    在前端开发中,我们经常会遇到对象的属性或方法不存在而导致的 TypeError 错误。在 ES11 中,新增了可选链式调用(Optional Chaining)的语法,可以很好地解决这个问题。

    1 年前
  • 利用 Docker 搭建 KubeDNS 服务

    KubeDNS 是 Kubernetes 集群中的一个核心组件,它提供了 DNS 服务,使得集群中的 Pod 可以通过域名相互访问。本文将介绍如何使用 Docker 搭建 KubeDNS 服务。

    1 年前
  • 了解 Headless CMS 的 “无头” 的好处

    在现代网络应用中,内容管理系统(CMS)扮演着至关重要的角色。它们允许网站管理员轻松地创建和维护内容,同时保持网站的一致性和可靠性。然而,传统的 CMS 通常是基于模板的,因此限制了前端开发人员的创造...

    1 年前
  • Serverless 架构下实现任务队列

    随着云计算的发展,越来越多的应用程序开始采用 Serverless 架构,这种架构方式可以极大地降低应用程序的运维成本。但是,在实际开发中,我们发现 Serverless 架构下实现任务队列并不是一件...

    1 年前
  • 空值合并运算符:在 ES9 中处理零和 NULL 值的新方法

    在前端开发中,我们经常会遇到处理零和 NULL 值的情况。ES9 中新增了一个空值合并运算符,可以帮助我们更方便地处理这些情况。 空值合并运算符是什么? 空值合并运算符(nullish coalesc...

    1 年前
  • 迈向 ES12:import.meta 对象的使用

    在前端开发中,我们经常需要引入外部模块或文件。在 ES6 中,我们可以使用 import 语句来实现模块化。而在 ES12 中,新增了一个 import.meta 对象,可以帮助我们更好地管理模块信息...

    1 年前
  • 学会使用 Redis 优化 Web 性能的 5 个技巧

    在 Web 开发中,性能是一个非常重要的问题。随着用户数量的增加,Web 应用程序的性能也会受到影响。这时候,使用 Redis 缓存是一个非常好的选择,可以大大提高 Web 应用程序的性能。

    1 年前
  • Angular Elements:将自定义元素上升到全新的水平

    前言 Angular Elements 是一个全新的 Angular 特性,它可以将 Angular 组件打包成自定义元素,让这些组件可以在任何 Web 应用程序中使用,无论是 Angular 应用程...

    1 年前
  • ESLint - 如何在 VSCode 编辑器中自动修复不规范的代码?

    什么是 ESLint? ESLint 是一个开源的 JavaScript 静态代码检查工具。它可以帮助开发人员在编写代码时检测出一些常见的编码错误或者不规范的代码。

    1 年前
  • 如何在 Gulp 项目中使用 Tailwind CSS

    在前端开发中,CSS 是不可缺少的一部分。而 Tailwind CSS 是一种基于 CSS 的工具,它可以帮助我们更快速、更高效地编写 CSS 样式。在本文中,我们将介绍如何在 Gulp 项目中使用 ...

    1 年前

相关推荐

    暂无文章