【问题标题】:Saving Dates in MongoDB as 64-bit integers?将 MongoDB 中的日期保存为 64 位整数?
【发布时间】:2021-09-29 03:33:43
【问题描述】:

我读到 MongoDB 将日期本地存储为 64 位整数。我刚刚做了以下(在nodejs中使用猫鼬):

MyModel.updateMany({}, { datePublished: new Date("2021-01-01") }).then(
    function (result) {
      res.json(result);
    }
);

结果如下所示:

{
   ...
   "datePublished": "2021-01-01T00:00:00.000Z"
}

...似乎不是 64 位整数?或者这是正确的,MongoDB 在这里向我展示了一些不同的东西(不同于它内部存储它的方式)?

【问题讨论】:

  • 内部日期存储为 64 位整数。您所看到的通常是由您的客户定义的。通常它是"2021-01-01T00:00:00.000Z"ISODate("2021-01-01T00:00:00.000Z") 或类似的 - 甚至可能转换为当地时间。

标签: database mongodb date datetime mongoose


【解决方案1】:

来自 MongoDB 文档:

BSON 日期是一个 64 位整数,表示自 Unix 纪元(1970 年 1 月 1 日)以来的毫秒数。这导致可表示的日期 > 过去和未来大约 2.9 亿年的范围。

https://docs.mongodb.com/manual/reference/bson-types/#std-label-document-bson-type-date

日期存储为纪元时间戳,但作为日期对象返回,如果需要,可以将其转换为字符串

【讨论】:

  • 所以我所做的是正确的,并且日期存储为整数并以字符串形式返回给我?
  • 它应该从bsonspec.org/spec.html返回为\x09类型。 node.js 驱动程序可能会将其转换为Date,并且仅在转换为 JSON、记录或输出到基于文本的流时才会转换为字符串/美化。
  • 非常感谢你们俩!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-23
  • 2019-08-15
相关资源
最近更新 更多