Navicat Premium是一個數據庫開發工具,可以讓您從單個應用程序同時鏈接到MySQL,MariaDB,MongoDB,SQL Server,Oracle,PostgreSQL和SQLite數據庫。與Amazon RDS,Amazon Aurora,Amazon Redshift,Microsoft Azure,Oracle Cloud,Google Cloud和MongoDB Atlas等雲數據庫兼容。數據庫
在MongoDB數據庫中打開任何文檔,您會注意到_id字段:編輯器
實際上,ObjectId / _id是每一個MongoDB文檔中惟一的字段。在今天的文章中,咱們將探討它的含義以及它對MongoDB數據庫的重要性。ide
ObjectId的結構工具
做爲一個快速、開發的總結,如下是_id的一些主要特徵:開發工具
_id是集合中文檔的主鍵;有了它,文檔(記錄)能夠彼此區分。ui
_id自動索引。指定{_id:spa
默認狀況下,_id字段的類型爲ObjectID,是MongoDB的BSON類型之一。若是須要,用戶還能夠將_id覆蓋爲ObjectID之外的其餘值。orm
ObjectID的長度爲12個字節,由2-4個字節的鏈組成。每一個鏈表明並指定文檔標識的特定方面。如下值組成完整的12個字節的組合:blog
一個4字節的值,表示自Unix時代以來的秒數排序
一個3字節的機器標識符
一個2字節的進程ID
以隨機值開頭的3字節計數器
一般,您沒必要擔憂生成ObjectID。若是未爲文檔分配_id值,MongoDB將自動生成一個。
建立新的ObjectId
若是要本身生成一個新的ObjectId,則可使用如下代碼:
newObjectId = ObjectId()
您也能夠直接在Navicat編輯器中鍵入它。
這將生成一個惟一的_id,例如:
ObjectId(「 5349b4ddd2781d08c09890f3」)
或者,您能夠提供一個12字節的ID:
myObjectId = ObjectId(「 5349b4ddd2781d08c09890f4」)
建立文檔的時間戳
因爲_id ObjectId默認狀況下存儲4字節的時間戳,所以在大多數狀況下,您不須要存儲任何文檔的建立時間。您可使用getTimestamp方法獲取文檔的建立時間:
ObjectId(「 5349b4ddd2781d08c09890f4」)。getTimestamp()
這將以ISO日期格式返回此文檔的建立時間
ISODate(「 2019-09-12T30:39:17Z」)
將ObjectId轉換爲String
在某些狀況下,您可能須要字符串格式的ObjectId值。若要將ObjectId轉換爲字符串,請使用如下代碼:
newObjectId.str
上面的代碼將返回Guid的字符串格式:
5349b4ddd2781d08c09890f3
文檔分類
因爲每一個ObjectId都包含一個時間戳,所以您能夠按_id對文檔進行排序,也能夠按建立時間對文檔進行排序。可是,請務必注意,此排序方法並不表明嚴格或精確的排序,由於ID的其餘組件可能會起做用,致使該命令反映的不單單是建立時間,還反映了其餘變量。
更改ObjectId
_id字段基本上是不可變的,所以,在建立文檔後,根據定義,它已分配了_id,該ID不能更改。話雖如此,插入新文檔時_id能夠被覆蓋。覆蓋文檔的_id字段可能頗有用,可是這樣作時,您有責任確保每一個文檔的值都是惟一的。
結論
MongoDB的_id字段在每一個MongoDB集合中都起着相當重要的做用。所以,瞭解如何建立以及什麼時候覆蓋它對於管理集合很是有用。