MongoDB ObjectId

什么是 ObjectId?

MongoDB 的 ObjectId 是一个由 MongoDB 自动生成的唯一标识符,用于在集合中唯一标识文档。它是一个12字节的值,由以下几个部分组成:

MongoDB ObjectId

(1)时间戳(4字节):表示 ObjectId 的生成时间,以 UNIX 时间戳格式存储。

(2)机器标识(3字节):表示生成 ObjectId 的机器的标识符,通常是机器的 MAC 地址的一部分。

(3)进程ID(2字节):表示生成 ObjectId 的进程的标识符。

(4)自增计数器(3字节):表示在同一进程中生成 ObjectId 的计数器,确保在同一秒内生成的 ObjectId 的唯一性。

ObjectId 的格式通常是一个 24 位的十六进制字符串,如:5f7b1b5d2b6c7e8f90123456

在 MongoDB 中,可以使用 ObjectId 来唯一标识和查询文档。例如,可以使用 _id 字段来查询具有特定 ObjectId 的文档:

> db.col.find({ "_id" : ObjectId("64e71af810366fa87109a12f") })
{ "_id" : ObjectId("64e71af810366fa87109a12f"), "name" : "张三", "age" : 3, "email" : "zhangsan@outlook.com", "sex" : "male" }

此查询将返回具有指定 ObjectId 的文档。

创建新的 ObjectId

可以使用 ObjectId() 函数来生成一个新的 ObjectId。使用以下代码生成新的ObjectId:

> var newObjId = new ObjectId();
> newObjId
ObjectId("64f67bd4e851871a0dba078c")

上面的语句返回以下唯一生成的 id:

ObjectId("64f67bd4e851871a0dba078c")

你也可以使用生成的 id 来取代 MongoDB 自动生成的 ObjectId:

> ObjectId("64f67bd4e851871a0dba078c")
ObjectId("64f67bd4e851871a0dba078c")

创建文档的时间戳

由于 ObjectId 中存储了 4 个字节的时间戳,所以你不需要为你的文档保存时间戳字段,你可以通过 getTimestamp() 函数来获取文档的创建时间:

> ObjectId().getTimestamp()
ISODate("2023-09-05T00:55:28Z")

以上代码将返回 ISO 格式的文档创建时间:

ISODate("2023-09-05T00:55:28Z")

ObjectId 转换为字符串

在某些情况下,您可能需要将 ObjectId 转换为字符串格式。你可以使用下面的代码:

> new ObjectId().str
64f67cb9e851871a0dba078e

以上代码将返回 Guid 格式的字符串为 64f67cb9e851871a0dba078e

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号