在前面學(xué)習(xí)的所有章節(jié)中,都有使用了MongoDB對象標(biāo)識符。 在本章中,我們將了解ObjectId的結(jié)構(gòu)。
ObjectId 是具有以下結(jié)構(gòu)的12字節(jié)BSON類型 -
4個(gè)字節(jié)表示從unix紀(jì)元開始的秒數(shù)3個(gè)字節(jié)是機(jī)器標(biāo)識符2個(gè)字節(jié)由進(jìn)程ID組成3個(gè)字節(jié)是隨機(jī)計(jì)數(shù)器值MongoDB使用ObjectIds作為每個(gè)文檔的_id字段的默認(rèn)值,這是在創(chuàng)建任何文檔時(shí)生成的。 ObjectId的復(fù)雜組合使得所有_id字段都是唯一的。
>newObjectId = ObjectId()
上述語句返回以下唯一生成的id -
ObjectId("595b99d9f6a6243715b3c312")
還可以提供一個(gè)12字節(jié)的 id 來可代替 MongoDB 生成 ObjectId -
>myObjectId = ObjectId("595b99d9f6a6243715b3c312")
由于_id ObjectId默認(rèn)存儲(chǔ)4字節(jié)的時(shí)間戳,在大多數(shù)情況下,不需要存儲(chǔ)任何文檔的創(chuàng)建時(shí)間??梢允褂?code>getTimestamp方法獲取文檔的創(chuàng)建時(shí)間 -
>ObjectId("595b99d9f6a6243715b3c312").getTimestamp()
這將以ISO日期格式返回此文檔的創(chuàng)建時(shí)間 -
> ObjectId("595b99d9f6a6243715b3c312").getTimestamp()
ISODate("2017-07-04T13:36:25Z")
在某些情況下,可能需要使用字符串格式的ObjectId值。 要轉(zhuǎn)換ObjectId為字符串,請使用以下代碼 -
>newObjectId.str
上面的代碼將返回Guid的字符串格式 -
595b99d9f6a6243715b3c312