MongoDB 中的时间日期类型及如何使用

阅读时长 4 分钟读完

在 MongoDB 中,有两种常见的时间日期存储方式:ISODate 和 Timestamp。本文将详细介绍这两种类型的定义、存储和使用方法,并提供一些示例代码帮助读者更好地理解。

ISODate

ISODate 是 MongoDB 中内置的时间日期类型,它是一个基于 UTC(协调世界时)的时间戳,以 ISO 8601 格式存储,格式为:

其中,T 表示时间的分隔符,Z 表示 UTC 时间。ISODate 可以存储的范围为从 1970 年 1 月 1 日 00:00:00 到 9999 年 12 月 31 日 23:59:59,精度为毫秒级。

在 MongoDB 中,可以使用 JavaScript Date 对象创建 ISODate 对象,例如:

也可以使用 ISODate() 函数创建 ISODate 对象:

查询 ISODate 对象时,可以使用 $date 查询操作符,并可指定比较条件(例如大于、小于等),例如:

Timestamp

Timestamp 是 MongoDB 中的另一种时间日期类型,也是一个基于 UTC 的时间戳,但它比 ISODate 短小,精度为秒级。Timestamp 类型由一个时间戳和一个计数器组成,其中时间戳占 32 位,计数器占 32 位,格式为:

其中,sec 表示秒级时间戳,op 表示一个操作码(一般为递增的计数器),由 MongoDB 在写入数据时自动生成,用于解决并发写入冲突。

要创建 Timestamp 对象,可以使用 new Timestamp() 构造函数,例如:

查询 Timestamp 对象时,可以使用 $timestamp 查询操作符,并可指定比较条件,例如:

如何使用时间日期类型

在 MongoDB 中,可以使用时间日期类型来存储文章、评论、订单等对象的创建时间或修改时间。在查询时,也可以通过时间日期类型来筛选数据。

例如,以下代码将创建一个名为 articles 的集合,并向其中插入一篇文章,该文章的创建时间为当前时间:

如果要查询某一天内创建的所有文章,可以像这样使用 $gte 和 $lt 操作符:

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

------------------
  ----------- -
    ----- -----------
    ---- --------
  -
--
展开代码

以上代码将返回所有 2020 年 1 月 1 日创建的文章。

总结

本文介绍了 MongoDB 中的两种时间日期类型:ISODate 和 Timestamp。ISODate 是一种 UTC 时间戳,精度为毫秒级,可存储的时间范围为从 1970 年 1 月 1 日 00:00:00 到 9999 年 12 月 31 日 23:59:59;Timestamp 是一种 UTC 时间戳,精度为秒级,由一个时间戳和一个计数器组成,用于解决并发写入冲突。

在使用 MongoDB 存储时间日期数据时,应根据实际情况选用合适的时间日期类型,并合理利用其查询操作符,提高查询效率。

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

纠错
反馈

纠错反馈