Appearance
Mongodb _id的生成
Mongodb自动生成 _id 字段, 它是一个ObjectId对象,值由12个字节组成, 如 62d178ab350c2fbc5a7f8371
它由0-9,a-f组成,是一个16进制的字符串,内存1个字节占八位,最大值是ff(255), 这就是为什么它只占了12个字节而不是24字节.
- A 4-byte timestamp, representing the ObjectId's creation, measured in seconds since the Unix epoch.
- A 5-byte random value generated once per process. This random value is unique to the machine and process.
- A 3-byte incrementing counter, initialized to a random value.
62d178ab | 350c2f | bc5a | 7f8371 |
---|---|---|---|
时间戳 | 机器码 | 进程号 | 自增值 |
- 获取时间戳的日期
js
new Date(0x62d178ab * 1000); // Fri Jul 15 2022 22:24:43 GMT+0800 (China Standard Time)
- 机器码
0x350c2f; // 3476527
- 进程号
0xbc5a; // 48218
- 自增值
自增值代表1秒内创建的文档数量,如果1s内创建的文档书超过3字节也就是 0xffffff, 那么mongodb的id就会出现重复
0x7f8371; // 8356721
判断是否为objectId
有一些mongodb的包可以判断objectId, 简单的方式可以使用正则, 如下
js
const _id = "62d178ab350c2fbc5a7f8371";
/[0-9a-f]{24}/i.test(_id); // true