在 MongoDB 中,有两种常见的时间日期存储方式:ISODate 和 Timestamp。本文将详细介绍这两种类型的定义、存储和使用方法,并提供一些示例代码帮助读者更好地理解。
ISODate
ISODate 是 MongoDB 中内置的时间日期类型,它是一个基于 UTC(协调世界时)的时间戳,以 ISO 8601 格式存储,格式为:
ISODate("2019-12-25T10:30:00.000Z")
其中,T 表示时间的分隔符,Z 表示 UTC 时间。ISODate 可以存储的范围为从 1970 年 1 月 1 日 00:00:00 到 9999 年 12 月 31 日 23:59:59,精度为毫秒级。
在 MongoDB 中,可以使用 JavaScript Date 对象创建 ISODate 对象,例如:
db.collection.insertOne({ date: new Date("2019-12-25T10:30:00.000Z") })
也可以使用 ISODate() 函数创建 ISODate 对象:
db.collection.insertOne({ date: ISODate("2019-12-25T10:30:00.000Z") })
查询 ISODate 对象时,可以使用 $date 查询操作符,并可指定比较条件(例如大于、小于等),例如:
db.collection.find({ date: { $gt: ISODate("2020-01-01T00:00:00.000Z") } })
Timestamp
Timestamp 是 MongoDB 中的另一种时间日期类型,也是一个基于 UTC 的时间戳,但它比 ISODate 短小,精度为秒级。Timestamp 类型由一个时间戳和一个计数器组成,其中时间戳占 32 位,计数器占 32 位,格式为:
Timestamp(sec, op)
其中,sec 表示秒级时间戳,op 表示一个操作码(一般为递增的计数器),由 MongoDB 在写入数据时自动生成,用于解决并发写入冲突。
要创建 Timestamp 对象,可以使用 new Timestamp() 构造函数,例如:
db.collection.insertOne({ date: new Timestamp(1577296200, 1) })
查询 Timestamp 对象时,可以使用 $timestamp 查询操作符,并可指定比较条件,例如:
db.collection.find({ date: { $gt: Timestamp(1577800800, 0) } })
如何使用时间日期类型
在 MongoDB 中,可以使用时间日期类型来存储文章、评论、订单等对象的创建时间或修改时间。在查询时,也可以通过时间日期类型来筛选数据。
例如,以下代码将创建一个名为 articles 的集合,并向其中插入一篇文章,该文章的创建时间为当前时间:
db.articles.insertOne({ title: "我的第一篇博客", content: "这是我的第一篇博客,欢迎大家多多指教!", created_at: new Date() })
如果要查询某一天内创建的所有文章,可以像这样使用 $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