您好,登錄后才能下訂單哦!
Navicat Premium是一個數(shù)據(jù)庫開發(fā)工具,可讓您從單個應用程序同時連接到MySQL,MariaDB,MongoDB,SQL Server,Oracle,PostgreSQL和SQLite數(shù)據(jù)庫。與Amazon RDS,Amazon Aurora,Amazon Redshift,Microsoft Azure,Oracle Cloud,Google Cloud和MongoDB Atlas等云數(shù)據(jù)庫兼容。
在MongoDB數(shù)據(jù)庫中打開任何文檔,您會注意到_id字段:
實際上,ObjectId / _id是每個MongoDB文檔中唯一的字段。在今天的文章中,我們將探討它的含義以及它對MongoDB數(shù)據(jù)庫的重要性。
ObjectId的結(jié)構(gòu)
作為一個快速、開發(fā)的總結(jié),以下是_id的一些主要特征:
_id是集合中文檔的主鍵;有了它,文檔(記錄)可以彼此區(qū)分。
_id自動索引。指定{_id:
默認情況下,_id字段的類型為ObjectID,是MongoDB的BSON類型之一。如果需要,用戶還可以將_id覆蓋為ObjectID以外的其他值。
ObjectID的長度為12個字節(jié),由2-4個字節(jié)的鏈組成。每個鏈代表并指定文檔標識的特定方面。以下值組成完整的12個字節(jié)的組合:
一個4字節(jié)的值,表示自Unix時代以來的秒數(shù)
一個3字節(jié)的機器標識符
一個2字節(jié)的進程ID
以隨機值開頭的3字節(jié)計數(shù)器
通常,您不必擔心生成ObjectID。如果未為文檔分配_id值,MongoDB將自動生成一個。
創(chuàng)建新的ObjectId
如果要自己生成一個新的ObjectId,則可以使用以下代碼:
newObjectId?=?ObjectId()
您也可以直接在Navicat編輯器中鍵入它。
這將生成一個唯一的_id,例如:
ObjectId(“?5349b4ddd2781d08c09890f3”)
或者,您可以提供一個12字節(jié)的ID:
myObjectId?=?ObjectId(“?5349b4ddd2781d08c09890f4”)
創(chuàng)建文檔的時間戳
由于_id ObjectId默認情況下存儲4字節(jié)的時間戳,因此在大多數(shù)情況下,您不需要存儲任何文檔的創(chuàng)建時間。您可以使用getTimestamp方法獲取文檔的創(chuàng)建時間:
ObjectId(“?5349b4ddd2781d08c09890f4”)。getTimestamp()
這將以ISO日期格式返回此文檔的創(chuàng)建時間
ISODate(“?2019-09-12T30:39:17Z”)
將ObjectId轉(zhuǎn)換為String
在某些情況下,您可能需要字符串格式的ObjectId值。若要將ObjectId轉(zhuǎn)換為字符串,請使用以下代碼:
newObjectId.str
上面的代碼將返回Guid的字符串格式:
5349b4ddd2781d08c09890f3
文檔分類
由于每個ObjectId都包含一個時間戳,因此您可以按_id對文檔進行排序,也可以按創(chuàng)建時間對文檔進行排序。但是,請務必注意,此排序方法并不代表嚴格或精確的排序,因為ID的其他組件可能會起作用,導致該命令反映的不僅僅是創(chuàng)建時間,還反映了其他變量。
更改ObjectId
_id字段基本上是不可變的,因此,在創(chuàng)建文檔后,根據(jù)定義,它已分配了_id,該ID不能更改。話雖如此,插入新文檔時_id可以被覆蓋。覆蓋文檔的_id字段可能很有用,但是這樣做時,您有責任確保每個文檔的值都是唯一的。
結(jié)論
MongoDB的_id字段在每個MongoDB集合中都起著至關(guān)重要的作用。因此,了解如何創(chuàng)建以及何時覆蓋它對于管理集合非常有用。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。