首页 > 解决方案 > 从其组件构建 mongo 十六进制对象 ID,例如时间戳。计数器,随机值

问题描述

我有一个程序将 mongo BSON 编组为 JSON,其中 mongo 对象 ID 由其组件表示:

"id": {
    "date": 1487703734000,
    "timestamp": 1487703734,
    "counter": 14046291,
    "processIdentifier": 24019,
    "machineIdentifier": 6597369,
    "timeSecond": 1487703734,
    "time": 1487703734000
  } 

我可以将其转换为十六进制的 mongo ID 吗?我可以在mongo 对象 ID 文档中看到它是如何组成的,但我不确定我的 JSON 中是否有他们所说的“随机值”。(看来我确实有时间戳和计数器)

任何帮助表示赞赏。谢谢

标签: mongodb

解决方案


是的,您可以使用任何支持的驱动程序来完成。您可以使用 5 字节随机值(3 字节机器 ID 和 2 字节进程 ID)。你可以参考这个它有很好的解释。

这是java和python选项。

您可以使用java 驱动程序来做到这一点。但它已被弃用。

ObjectId​(Date date, int machineIdentifier, short processIdentifier, int counter)

没有办法使用 mongodb 命令。每种支持 mongo 的编程语言都有一个生成选项,objectId但可能没有这个特定的选项。

python有一个选择。参考

默认情况下,ObjectId() 创建一个新的唯一标识符。可选参数 oid 可以是 ObjectId,也可以是任何 12 个字节,或者在 Python 2 中,可以是任何 12 个字符的 str。

例如,12 字节 b'foo-bar-quux' 不遵循 ObjectId 规范,但它们是可接受的输入:

ObjectId(b'foo-bar-quux') => ObjectId('666f6f2d6261722d71757578')

但我不确定我的 JSON 中是否有他们所说的“随机值”


推荐阅读