在前面的章節(jié)中,我們一直在使用MongoDB對象Id。在本章中,我們將了解ObjectId的結(jié)構(gòu)。
ObjectId 是一個(gè)12字節(jié)的 BSON 類型,具有以下結(jié)構(gòu)-
前4個(gè)字節(jié)表示自 unix 新紀(jì)元以來的秒數(shù)
接下來的3個(gè)字節(jié)是機(jī)器標(biāo)識符
接下來的2個(gè)字節(jié)由進(jìn)程 id 組成
最后3個(gè)字節(jié)是一個(gè)隨機(jī)計(jì)數(shù)器值
MongoDB使用ObjectIds作為_id
每個(gè)文檔字段的默認(rèn)值,該默認(rèn)值是在創(chuàng)建任何文檔時(shí)生成的。ObjectId的復(fù)雜組合使所有_id字段唯一。
要生成新的ObjectId,請使用以下代碼-
>newObjectId = ObjectId()
上面的語句返回以下唯一生成的id-
ObjectId("5349b4ddd2781d08c09890f3")
除了提供MongoDB生成ObjectId之外,您還可以提供12字節(jié)的ID-
>myObjectId = ObjectId("5349b4ddd2781d08c09890f4")
由于_id ObjectId默認(rèn)情況下存儲4字節(jié)的時(shí)間戳,因此在大多數(shù)情況下,您不需要存儲任何文檔的創(chuàng)建時(shí)間。您可以使用getTimestamp方法獲取文檔的創(chuàng)建時(shí)間-
>ObjectId("5349b4ddd2781d08c09890f4").getTimestamp()
這將以ISO日期格式返回此文檔的創(chuàng)建時(shí)間-
ISODate("2014-04-12T21:49:17Z")
在某些情況下,您可能需要字符串格式的ObjectId值。要以字符串形式轉(zhuǎn)換ObjectId,請使用以下代碼-
>newObjectId.str
上面的代碼將返回Guid的字符串格式-
5349b4ddd2781d08c09890f3