MongoDB ObjectId

2022-09-06 17:18 更新

在前面幾個章節(jié)中我們已經(jīng)使用了MongoDB 的對象 Id(ObjectId)。

在本章節(jié)中,我們將了解的ObjectId的結(jié)構(gòu)。

ObjectId 是一個12字節(jié) BSON 類型數(shù)據(jù),有以下格式:

  • 前4個字節(jié)表示時間戳
  • 接下來的3個字節(jié)是機(jī)器標(biāo)識碼
  • 緊接的兩個字節(jié)由進(jìn)程id組成(PID)
  • 最后三個字節(jié)是隨機(jī)數(shù)。

MongoDB中存儲的文檔必須有一個"_id"鍵。這個鍵的值可以是任何類型的,默認(rèn)是個ObjectId對象。

在一個集合里面,每個集合都有唯一的"_id"值,來確保集合里面每個文檔都能被唯一標(biāo)識。

MongoDB采用ObjectId,而不是其他比較常規(guī)的做法(比如自動增加的主鍵)的主要原因,因?yàn)樵诙鄠€ 服務(wù)器上同步自動增加主鍵值既費(fèi)力還費(fèi)時。


創(chuàng)建新的ObjectId

使用以下代碼生成新的ObjectId:

>newObjectId = ObjectId()

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

ObjectId("5349b4ddd2781d08c09890f3")

你也可以使用生成的id來取代MongoDB自動生成的ObjectId:

>myObjectId = ObjectId("5349b4ddd2781d08c09890f4")

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

由于 ObjectId 中存儲了 4 個字節(jié)的時間戳,所以你不需要為你的文檔保存時間戳字段,你可以通過 getTimestamp 函數(shù)來獲取文檔的創(chuàng)建時間:

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

以上代碼將返回 ISO 格式的文檔創(chuàng)建時間:

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

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

在某些情況下,您可能需要將ObjectId轉(zhuǎn)換為字符串格式。你可以使用下面的代碼:

>new ObjectId.str

以上代碼將返回Guid格式的字符串::

5349b4ddd2781d08c09890f3
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號