MongoDB的_id字段含義,及對MongoDB數據庫的重要性

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字段:編輯器

Navicat使用教程:關於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字節計數器

Navicat使用教程:關於MongoDB的_id字段

一般,您沒必要擔憂生成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集合中都起着相當重要的做用。所以,瞭解如何建立以及什麼時候覆蓋它對於管理集合很是有用。

相關文章
相關標籤/搜索