ObjectId(对象标识符)
最后更新:2026-10-09
ObjectId(对象标识符)
ObjectId 是 MongoDB 默认的 _id 类型,一个 12 字节的唯一标识符:4 字节时间戳 + 5 字节随机值 + 3 字节自增计数器。它在插入文档未指定 _id 时自动生成,保证分布式环境下的唯一性,且本身编码了创建时间(可提取)。
| 分类 | BSON 类型 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
// 自动生成
{ _id: ObjectId("64c8a1b2f3d4e5a6b7c8d9e0") }
// 获取时间戳
ObjectId("...").getTimestamp()
返回值:返回一个ObjectId实例,打印时显示为24位十六进制字符串
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// ObjectId:插入后查看 _id
const oid = ObjectId()
print(oid.getTimestamp()) // 创建时间
运行结果:
2026-09-25T08:30:00Z
📌 注意事项
- 12 字节 = 4 字节 Unix 时间戳 + 5 字节随机 + 3 字节计数器
- ObjectId 单调递增,可按 _id 排序近似按插入时间排序
- 字符串形式为 24 位十六进制
- 可通过 getTimestamp() 提取创建时间
🏷️ 相关标签
💡 相关案例
文档与BSON:MongoDB的数据基石
插入文档:insertOne与insertMany详解
mongoose高级模式:性能与灵活性
mongoose模型与Schema设计
mongoose数据校验与中间件
📚 相关教程
❓ 常见问题
Q_id 能换成自增整数吗?
A可以,插入时手动指定 _id 即可。但自增整数在分布式写入下需额外协调,MongoDB 默认 ObjectId 正是为避免这种开销。
QObjectId字符串是什么格式?
A24位十六进制,例如64c8a1b2f3d4e5a6b7c8d9e0,每两位一个字节。
QObjectId能按时间排序吗?
A近似可以,前4字节是时间戳,所以按_id排序接近插入顺序,但不是精确时间序。