MongoDB ObjectId
生成合法 ObjectId,或拆出现有 id 的时间戳、机器哈希、进程与序列。
输入
输出
ObjectId 是 12 字节、写成 24 位十六进制的值,结构是 4 字节秒级时间戳(大端)+ 5 字节随机值 + 3 字节计数器。时间戳就是它的 getTimestamp:把前 8 位十六进制按无符号整数读出来再乘 1000 就是创建时间,精度到秒。因为时间戳在最前面,按 _id 排序天然接近创建顺序,这也是它适合做主键的原因。
能反查的只有这一段时间戳。中间 5 字节在 MongoDB 3.4 之前是主机名哈希(3 字节)加进程号(2 字节),之后统一改成「进程启动时随机生成一次」的 5 个随机字节,计数器也从 0 改成随机起点,所以现在从 id 里反查不出机器名和 PID,容器环境也不再因为主机名重复而撞号——解析结果里这一段只当作进程指纹看。同一秒内的先后取决于计数器的递增顺序,计数器到 0xFFFFFF 会归零,此时这一秒内的顺序就断了;生成模式会保持计数器连续递增,并提供按时间升序整理。
MongoDB ObjectId怎么用
- 解析:切到「解析」,每行写一个 ObjectId,输出本地时间、UTC、距今多久的相对说法、5 字节随机值和计数器;长度或字符不合法的行会在最后一列单独标注,其余行照常解析。
- 生成:「生成」模式忽略输入框,按条数(1–200)批量产出合法 id,上方的批次时间写明这一批落在哪一秒。
- 升序开关:打开「按生成时间升序」会把结果按(时间戳,计数器)重排;关掉则保持生成顺序,计数器跨过 0xFFFFFF 归零时两者的差别就会显现。
常见问题
24 位里到底哪部分能信?
只有前 4 字节的时间戳是可解读信息。中间 5 字节和末 3 字节的作用是「同一秒内不重复」,它们不含业务含义,也不能用来推断机器。
同一秒内生成的 id 一定有序吗?
同一进程内是有序的:计数器逐条加一。不同进程各有随机起点,顺序无法保证;而且计数器写满 0xFFFFFF 后归零,同一秒内会出现「小的排在后面」,这也是本工具默认帮你排序的原因。
大写十六进制或者 23 位会怎样?
大写合法,解析时按小写归一化显示;长度不是 24 位、或出现 g 这类非十六进制字符的行会被标成错误,不会拖垮整批。
对应功能编号 #110无需安装,手机端同样可用按 Ctrl + K 换工具