【问题标题】:How to convert from Timestamp to Mongo ObjectID如何从时间戳转换为 Mongo ObjectID
【发布时间】:2016-12-02 11:05:35
【问题描述】:

我知道我们可以使用getTimestamp() 从 ObjectId 中检索时间戳,但是有没有办法从时间戳中生成 ObjectId?

更具体地说,如果我有 monthyear 的输入,那么我想将其转换为 Mongo ObjectID 以在 db 中查询,我该怎么做?

【问题讨论】:

标签: mongodb timestamp


【解决方案1】:

试试这个,

> ObjectId("5a682326bf8380e6e6584ba5").getTimestamp()
ISODate("2018-01-24T06:09:42Z")
> ObjectId.fromDate(ISODate("2018-01-24T06:09:42Z"))
ObjectId("5a6823260000000000000000")

从 mongo shell 工作。

【讨论】:

    【解决方案2】:

    如果您将一个数字传递给 bson ObjectId 构造函数,它会将其作为时间戳并将其传递给 generate 方法。

    您可以从每个 this answer 获取月份和年份的日期(月份从零开始)。

    所以:

    timestamp = ~~(new Date(2016, 11, 17) / 1000)
    new ObjectId(timestamp)
    

    【讨论】:

      【解决方案3】:

      是的,你可以:

      dummy_id = ObjectId.from_datetime(gen_time)
      

      其中 gen_time 是日期时间。

      【讨论】:

        【解决方案4】:

        ObjectId() 是一个 12 字节的 BSON 类型,包括:

        • 前 4 个字节表示自 unix 纪元以来的秒数
        • 接下来的 3 个字节是机器标识符
        • 接下来的 2 个字节由进程 ID 组成
        • 最后 3 个字节是随机计数器值

        显然,您将无法仅从时间戳创建ObjectId()

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-04-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多