创建MongoDB文档时,如果没有赋值ID,系统会自动帮你创建一个,通常会在客户端由驱动程序完成。
ObjectId使用12字节的存储空间,每个字节两位十六进制数字,是一个24位的字符串。其含义分别代表时间戳(4字节)、机器码(3字节)、PID(2字节)、计数器(3字节)。时间戳是文档创建时的时间,只是从十进制转化成了十六进制。机器码是生成文档主机的ID,为了区分多主机而生成的。PID则是区分同主机下不同mongoDB进程产生的,同样防止冲突。前面的9个字节是保证了一秒内不同机器不同进程生成ObjectId不冲突,最后的3个字节是一个自动增加的计数器,用来确保在同一秒内产生的ObjectId也不会冲突,允许256的3次方等于16777216条记录的唯一性。