Mongoose 中自动更新 createdAt 和 updatedAt 字段的方法详解

阅读时长 5 分钟读完

在开发 Web 应用程序时,常常需要记录数据的创建和修改时间。Mongoose 是一个优秀的 Node.js 下 MongoDB 驱动的工具库,提供了一个非常方便的功能,就是自动更新数据库中的 createdAt 和 updatedAt 字段。本文将详细介绍这个功能以及如何使用它。

为什么需要自动更新 createdAt 和 updatedAt 字段

记录数据的创建时间和修改时间可以帮助我们更好地管理数据,比如:

  • 我们可以根据创建时间来判断某个数据是否已经过期;
  • 我们可以根据修改时间来追踪数据的变更历史,帮助排查问题;
  • 我们也可以根据这两个时间来进行高效的数据查询,比如查询某个时间范围内创建或修改的数据。

为了让开发者更便捷地记录数据的创建和修改时间,Mongoose 提供了一个非常方便的功能,即自动更新数据库中的 createdAt 和 updatedAt 字段。

如何自动更新 createdAt 和 updatedAt 字段

使用 Mongoose 实现自动更新 createdAt 和 updatedAt 字段有两种方法:

Schema 中自定义字段类型

我们可以在定义 Schema 时,通过自定义字段类型来实现自动更新 createdAt 和 updatedAt 字段。示例代码如下:

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

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

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

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

在上面的代码中,我们定义了一个 Schema,其中 title 和 content 分别表示数据的标题和内容,createdAt 和 updatedAt 分别表示数据的创建时间和更新时间。在定义这两个字段时,我们通过自定义字段类型来指定它们为 Date 类型,并设置了默认值为当前时间(通过 Date.now() 来获取)。

接着,我们通过 schema.pre('save', handler) 方法注册了一个 save 钩子函数(handler),当数据进行保存之前,该钩子函数会被自动调用。在该钩子函数中,我们通过 Date.now() 获取当前时间,然后将其设置为数据的 updatedAt 属性值。如果数据的 createdAt 未设置,我们也将其设置为当前时间。最后,通过调用 next() 函数让程序继续执行。这样,每次保存数据时,都会自动更新 createdAt 和 updatedAt 字段。

mongoose-beautiful-unique-validation 插件

另一种方式是使用第三方插件 mongoose-beautiful-unique-validation。通过该插件,我们可以自定义一个 ValidationError 函数来处理 mongoose 的验证错误,其中,会自动更新 createdAt 和 updatedAt 字段。示例代码如下:

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

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

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

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

在上面的代码中,我们首先导入了 mongoose、mongoose-beautiful-unique-validation 模块,并定义了一个 Schema。接着,通过 schema.plugin(beautifyUnique, options) 方法,将 mongoose-beautiful-unique-validation 插件绑定到该 Schema 上。在 options 中,我们设置了 defaultMessage 属性,它会用于自定义 ValidationError 函数的错误提示。

通过这种方式,只需要在定义 Schema 时,引入 mongoose-beautiful-unique-validation 插件即可完成自动更新 createdAt 和 updatedAt 字段的功能。

总结

本文介绍了 Mongoose 中如何自动更新 createdAt 和 updatedAt 字段,分别介绍了两种不同的实现方式:自定义字段类型和使用第三方插件。通过学习本文,相信读者已经能够掌握如何使用这个功能,并在实际应用中起到相应的作用。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/647308e3968c7c53b008f3a0

纠错
反馈