1. 程式人生 > >Mongodb中的ObjectId淺談

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是在客戶端預設生成的,而不是服務端自己在插入文件時由服務端生成的。