Skip to content

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