MongoDB对象ID


在前面的所有章节中,我们一直在使用MongoDB对象ID。在本章中,我们将了解ObjectId的结构。

ObjectId是12字节的BSON类型,具有以下结构:

  • 前4个字节代表自unix纪元以来的秒数

  • 接下来的3个字节是机器标识符

  • 接下来的2个字节包括进程ID

  • 最后3个字节是随机计数器值

MongoDB使用ObjectIds作为默认值_id每个文档的字段,该字段在创建任何文档时生成。 ObjectId的复杂组合使所有_id字段唯一。

创建新的ObjectId


要生成一个新的ObjectId,请使用以下代码:

>newObjectId = ObjectId()

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

ObjectId("5349b4ddd2781d08c09890f3")

除了提供MongoDB生成的ObjectId之外,你还可以提供一个12字节的ID:

>myObjectId = ObjectId("5349b4ddd2781d08c09890f4")

创建文档的时间戳


由于_id ObjectId默认情况下存储4字节的时间戳,因此在大多数情况下,你不需要存储任何文档的创建时间。你可以使用getTimestamp方法获取文档的创建时间:

>ObjectId("5349b4ddd2781d08c09890f4").getTimestamp()

这将以ISO日期格式返回此文档的创建时间:

ISODate("2014-04-12T21:49:17Z")

将ObjectId转换为String


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

>newObjectId.str

上面的代码将返回Guid的字符串格式:

5349b4ddd2781d08c09890f3