鍍金池/ 教程/ 數(shù)據(jù)庫(kù)/ ObjectId
更新文檔
GridFS
Rockmongo 管理工具
Map Reduce
Java
創(chuàng)建備份
數(shù)據(jù)模型
創(chuàng)建數(shù)據(jù)庫(kù)
映射
查詢文檔
索引限制
ObjectId
刪除文檔
數(shù)據(jù)類型
高級(jí)索引
索引
優(yōu)勢(shì)
記錄排序
查詢分析
插入文檔
刪除集合
全文檢索
創(chuàng)建集合
概述
數(shù)據(jù)庫(kù)引用
覆蓋索引查詢
安裝環(huán)境
PHP
刪除數(shù)據(jù)庫(kù)
固定集合
關(guān)系
聚合
自動(dòng)增長(zhǎng)
復(fù)制
限制記錄
部署
分片
正則表達(dá)式
原子操作

ObjectId

前面的幾章中都涉及到了 MongoDB 的對(duì)象 id。本章將介紹 ObjectId 的結(jié)構(gòu)。

ObjectId 是一個(gè) 12 字節(jié)的 BSON 類型,其結(jié)構(gòu)如下:

  • 前 4 個(gè)字節(jié)代表 UNIX 的時(shí)間戳(以秒計(jì))。
  • 接下來(lái)的 3 個(gè)字節(jié)代表機(jī)器標(biāo)識(shí)符。
  • 接下來(lái)的 2 個(gè)字節(jié)代表進(jìn)程 id。
  • 最后 3 個(gè)字節(jié)代表隨機(jī)數(shù)。

MongoDB 使用 ObjectId 作為每一文檔的 _id 字段的默認(rèn)值(在創(chuàng)建文檔時(shí)產(chǎn)生)。ObjectId 的復(fù)雜組合保證了 _id 字段的唯一性。

創(chuàng)建新的 ObjectId

使用下列代碼創(chuàng)建新的 ObjectId:

>newObjectId = ObjectId()

上述代碼返回一個(gè)唯一的 id:

ObjectId("5349b4ddd2781d08c09890f3")

如果不用 MongoDB 來(lái)生成,可以自己提供一個(gè) 12 字節(jié)的 id:

>myObjectId = ObjectId("5349b4ddd2781d08c09890f4")

創(chuàng)建文檔時(shí)間戳

因?yàn)?_id ObjectId 默認(rèn)保存 4 字節(jié)的時(shí)間戳,所以在大多數(shù)情況下不需要保存文檔的創(chuàng)建時(shí)間。使用 getTimestamp 方法可獲取文檔的創(chuàng)建時(shí)間。

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

返回標(biāo)準(zhǔn)時(shí)期格式表示的文檔創(chuàng)建時(shí)間:

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

將 ObjectId 轉(zhuǎn)換為字符串

在某些情況下,你需要用字符串格式表示 ObjectId 值,使用如下命令可實(shí)現(xiàn)這一點(diǎn):

>newObjectId.str

上述代碼以 GUID 格式返回字符串。

5349b4ddd2781d08c09890f3