【问题标题】:Is it possible to retroactively add "createdAt" key in each document of a mongoDB collection是否可以在 mongoDB 集合的每个文档中追溯添加“createdAt”键
【发布时间】:2021-12-30 05:15:16
【问题描述】:

我最近才认为在 mongoDB 的 User 集合中添加 createdAt 作为默认字段是个好主意。不幸的是,对于以前注册过的所有用户,这个 createdAt 字段都丢失了。

我觉得我可能不走运,但我想知道createdAt 是否以某种方式编码在_id 中,或者在任何地方作为元数据可用。这可能吗?

顺便说一句,我有从我们的 gmail 帐户发送的所有电子邮件验证电子邮件,这些电子邮件是在用户注册/被添加到此集合时发送的。这是一个延伸,但也许有一种自动化的方法来提取所有这些电子邮件发送时间,并使用email 字段将这些电子邮件发送时间加入我们的用户集合。

【问题讨论】:

  • 你可以使用objectIdValue.getTimestamp()这个方法来获取文档创建日期——我将基于_id字段值。

标签: mongodb datecreated


【解决方案1】:

MongoDB 12 字节 ObjectId 值包括:

  • 4 字节时间戳值,表示 ObjectId 的创建,以 Unix 纪元以来的秒数为单位。
  • 5 字节随机值每个进程生成一次。此随机值对于机器和流程来说是唯一的。
  • 3字节递增计数器,初始化为随机值。

例如:

ObjectId("61e52e26fd6b5909358c902a")

61e52e26(十六进制)=> 1642409510(十进制)=> 2022/1/17 08:51:50

所以你可以使用_id 作为createdAt

【讨论】:

    猜你喜欢
    • 2020-03-21
    • 1970-01-01
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    • 2019-01-01
    • 2022-01-07
    • 2016-08-20
    相关资源
    最近更新 更多