Appearance
MongoDB ObjectId
什么是 ObjectId?
ObjectId 是 MongoDB 默认用于文档主键 _id 的 12 字节 BSON 类型,可在分布式环境下由客户端或服务端生成,且近似按时间递增,便于索引与排序。
结构(12 字节)
- 4 字节:Unix 时间戳(秒)
- 5 字节:随机值(机器+进程唯一)
- 3 字节:自增计数器(同一秒内区分)
因此可从 ObjectId 近似得到“创建时间”:
javascript
const id = ObjectId("507f1f77bcf86cd799439011");
id.getTimestamp(); // 在 mongosh 中插入时不指定 _id
插入文档时若不提供 _id,MongoDB 会自动生成 ObjectId:
javascript
db.users.insertOne({ name: "张三" });
// 返回 insertedId: ObjectId("...")自定义 _id
可以使用任意唯一值作为 _id(如数字、字符串、UUID),不限于 ObjectId:
javascript
db.users.insertOne({ _id: "user001", name: "张三" });在应用层生成
各语言驱动都支持生成 ObjectId,便于在插入前就知道 _id(例如用于关联或返回给前端)。下一节介绍 MongoDB Map Reduce。