说明
- ObjectId(<value>)
- 重要- mongosh 方法- 本页面提供 - mongosh方法的相关信息。这不是特定于语言的驱动程序(例如 Node.js)的文档。- 如需了解 MongoDB API 驱动程序,请参阅特定语言的 MongoDB 驱动程序文档。 - 返回新的ObjectId。12 字节的 ObjectId 由以下部分组成: - 一个 4 字节时间戳,它表示 ObjectId 的创建时间,并以自 UNIX 纪元以来的秒数为单位进行测量。 
- 5 字节的随机值,每个客户端进程生成一次。这个随机值对于机器和进程是唯一的。如果进程重新启动或进程的主节点发生变化,此值会被重新生成。 
- 每个客户端进程的 3字节递增计数器,初始化为随机值。当进程重新启动时,计数器会重置。 
 - 对于时间戳和计数器值,最高有效字节在字节序列中最先出现(大端字节序)。对于其他 BSON 值,最低有效字节最先出现(小端字节序)。 - 如果使用整数值创建对象标识符(ObjectId),则该整数将替换时间戳。 
兼容性
可以使用 ObjectId() 查找托管在以下环境中的部署:
- MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务 
- MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本 
- MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本 
语法
ObjectId() 可以接受以下输入值之一:
| 输入类型 | 说明 | 
|---|---|
| 
 | 可选。新对象标识符的 24 个字符十六进制字符串值。 | 
| 
 | 可选。将整数值(以秒为单位)添加到 Unix 纪元中,以创建新的时间戳。 | 
方法
ObjectId() 有以下方法:
| 方法 | 说明 | 
|---|---|
| 以日期形式返回对象的时间戳部分。 | |
| 以十六进制字符串形式返回对象标识符。 | 
行为
从 MongoDB 5.0 开始,mongosh 将取代旧版的 mongo shell。ObjectId() 方法在 mongosh 中的运行方式与在旧版的 mongo shell 中的运行方式不同。有关旧版方法的更多信息,请参阅旧版的 mongo Shell。
示例
生成新的对象标识符
要生成新的 ObjectId,请使用不含参数的 ObjectId():
newObjectId = ObjectId() 
在此示例中,newObjectId 的值为:
ObjectId("507f1f77bcf86cd799439011") 
返回十六进制字符串
要以十六进制字符串形式返回对象标识符(ObjectId),请使用 toString() 方法。
ObjectId("507f191e810c19729de860ea").toString() 
该方法返回:
507f191e810c19729de860ea 
指定日期
您可以使用自定义日期来指定 ObjectId。
使用 timestamp 作为参数设置新的 ObjectId
您可以使用 ObjectId.getTimestamp() 验证日期。
newObjectId = ObjectId(timestamp) 
ObjectId("6592008029c8c3e4dc76256c") 
指定整数字符串
如果要调整对象标识符时间戳,请使用整数生成新的对象标识符。
newObjectId = ObjectId(32) 
对象标识符的值如下所示:
ObjectId("00000020f51bb4362eee2a4d") 
示例对象标识符由以下部分组成:
- 一个四字节的时间戳, - 00000020
- 五字节随机元素, - f51bb4362e
- 一个三字节计数器, - ee2a4d
ObjectId 的前四个字节是自 Unix 纪元 以来的秒数。在此示例中,ObjectId 时间戳为 00000020,以十六进制表示为 32。
指定一个十六进制字符串
如果要使用十六进制字符串来指定ObjectId,请在调用 ObjectId() 时传递一个唯一的 24 字符十六进制值:
newObjectId = ObjectId("507f191e810c19729de860ea")