MongoDB ObjectId


概述

> db.col.find()
{ "_id" : ObjectId("56c56dd4ca446fab71e4c38a"), "x" : 1, "y" : 3 }
{ "_id" : ObjectId("56c572c2ca446fab71e4c38b"), "x" : 2, "y" : 2 }
{ "_id" : ObjectId("56c572c8ca446fab71e4c38c"), "x" : 3, "y" : 1 }
{ "_id" : ObjectId("56c5a7beb708aa3d13c61cc7"), "c" : 3, "m" : 1 }

每個文檔中都有一個“_id”,她是一個12字節的BSON類型數據,格式如下

56c56dd4ca446fab71e4c38a
  • 前4個字節表示時間戳
  • 接下來的3個字節是機器標識碼
  • 緊接的兩個字節由進程id組成(PID)
  • 最后三個字節是隨機數

MongoDB存儲的文檔必須有一個的“_id”鍵,這個鍵值可以是任意類型,默認的是ObjectId類型對象。

文檔的“_id”是唯一的,以確保集合中的文檔被唯一標識。

MongoDB采用ObjectId,而不是其他比較常規的做法(比如自動增加的主鍵)的主要原因,因為在多個服務器上同步自動增加主鍵值既費力還費時。(不同機器可以通過機器名區分,同一個機器通過時間戳、隨機數、進程id區分)

創建新的ObjectId

> newObjectId_1 = ObjectId()
ObjectId("56c686d264799370c0ef357b")
> newObjectId_2 = ObjectId()
ObjectId("56c686d364799370c0ef357c")

可以用已經生成的id取代自動生成的ObjectId

d = ObjectId("56c686d364799370c0ef357c")
ObjectId("56c686d364799370c0ef357c")

獲取文檔的時間戳

由於ObjectId的前4位是時間戳,因此不需要為文檔特意的保存時間戳,可以用getTimestamp()獲取

> ObjectId("56c56dd4ca446fab71e4c38a").getTimestamp()
ISODate("2016-02-18T07:08:04Z")

ObjectId轉化為時間戳

> new ObjectId().str
56c68c3b64799370c0ef3581
> ObjectId("56c56dd4ca446fab71e4c38a").str
56c56dd4ca446fab71e4c38a

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM