Mongodb中的ObjectId浅谈

使用了Mongodb已经有一段时间了,但是从来没有关注过一个东西,那就是每次插入一条新文档时,文档中都会有一个字段ObjectId,那么这个字段有什么含义呢?这个字段的值又是代表什么呢?简单了解了下,在这里跟大家分享下。


ObjectId从表面看是一个由12个字节组成的字符串,那么这12个字节都代表什么含义呢?我们将12个字节进行切分,如下

4个字节 | 3个字节 | 2个字节 | 3个字节

从前往后的含义依次是:

4个字节:服务器的时间戳,单位是秒

3个字节:Mongodb所在机器的机器识别码

2个字节:表示生成该文档的进程ID

3个字节:随机数


从上面的ObjectId字节描述来看,其实,在ObjectId内部其实是包含不少有用信息的,最直观的就是时间戳,可以知道当前文档记录是什么时候插入的。那么如果根据这里ObjectId的前四个字节来直观查看日期时间呢?

建设我们这里有个ObjectId("53102b43bf1044ed8b0ba36b"),此时怎么查看日期时间呢?可以像下面一样操作:

ObjectId("53102b43bf1044ed8b0ba36b").getTimestamp();

此时我们便能够看到如下结果:

ISODate("2014-02-28T06:22:59Z");

另外需要说明的是,ObjectId是在客户端默认生成的,而不是服务端自己在插入文档时由服务端生成的。


你可能感兴趣的:(Mongodb)