【问题标题】:MongoDB Date.now() format different from new Date(string) formatMongoDB Date.now() 格式不同于新的 Date(string) 格式
【发布时间】:2021-10-02 15:10:07
【问题描述】:

如果我保存这样的字段,我很难理解 MongoDB 日期格式背后的逻辑:

date: Date.now()

在数据库中的样子:

date: 1633186879027

我有一个类似 2021-08-27T19:00:38.000+00:00 的日期,我保存它是这样的:

date: "2021-08-27T19:00:38.000+00:00"

在数据库中的样子:

date: "2021-08-27T19:00:38.000+00:00"

这不是我想要的,因为它是一个字符串,我不能按日期排序。

所以我试着像这样保存它:

date: new Date("2021-08-27T19:00:38.000+00:00")

在数据库中看起来像:

date: 2021-08-27T19:00:38.000+00:00

没有括号,就像 Mongodb 对字符串一样,所以也不能是字符串

我应该如何保存它以使其看起来像第一个 (1633186879027)? 因为我需要按日期对内容进行排序,我认为这是正确的格式?

【问题讨论】:

  • 参考mongodb date doc和类似的so question
  • 请注意,您的客户端应用程序/shell 可能会根据某些应用程序设置和/或区域设置数据格式化日期值。您使用哪个应用程序/shell?
  • 我在 vscode 上使用 Node
  • @NathanBernard 没有限制,可以任意格式保存,推荐使用new Date()表示ISODate格式,在mongodb中会保存为BSON $date类型。因为它几乎支持我们在数字时间戳中所做的所有操作。还有很多Date aggregation operators
  • 您的时间戳是 ECMA-262 支持的格式之一,用于由 Date.parse 解析,它返回一个时间值。所以考虑date: Date.parse("2021-08-27T19:00:38.000+00:00"),它等价于date: new Date("2021-08-27T19:00:38.000+00:00").getTime(),但输入更少。

标签: javascript mongodb date


【解决方案1】:

MongoDB 使用 BSON 存储数据。定义为here

日期时间使用 64 位整数存储为自 1970-01-01 以来的毫秒数。

Date.now() 返回一个整数,因此样本数据将存储为 BSON 类型 \x12,其值为 1633186879027

new Date("2021-08-27T19:00:38.000+00:00") 将存储为 BSON 类型 \x09,其值为 1630090838000

输出date: 2021-08-27T19:00:38.000+00:00由客户端的驱动程序或应用程序检索后生成。

MongoDB 直接支持按日期排序。

另请注意,如果您将日期存储为像 "2021-08-27T19:00:38.000+00:00" 这样的字符串,这些字符串的字典排序会将它们按时间顺序排列。

【讨论】:

  • 据我所知 MongoDB 不支持字典排序?我正在使用聚合来查询数据库
  • 字典排序是字符串的排序方式。
  • 老实说,我认为在 2021 年,像 MongoDB 这样的流行数据库具有这样的功能,但我认为它实际上并没有,我通过管道聚合进行的测试并没有那样工作。对字典不太熟悉,但它没有正确地将日期排序为字符串
猜你喜欢
  • 2016-01-12
  • 2019-03-13
  • 1970-01-01
  • 2022-01-21
  • 1970-01-01
  • 1970-01-01
  • 2020-12-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多