MongoDB ObjectId詳解及使用

2021-07-14 06:46:45 字數 1932 閱讀 5077

objectid構成

之前我們使用mysql等關係型資料庫時,主鍵都是設定成自增的。但在分布式環境下,這種方法就不可行了,會產生衝突。為此,mongodb採用了乙個稱之為objectid的型別來做主鍵。objectid是乙個12位元組的 bson型別字串。按照位元組順序,依次代表:

objectid獲取時間

從objectid的構造上來看,內部就嵌入了時間型別。我們肯定可以從中獲取時間資訊:即插入此文件時的時間。mongodb對objectid物件提供了gettimestamp()方法來獲取objectid的時間。

> a = new objectid()

objectid("53102b43bf1044ed8b0ba36b")

> a.gettimestamp()

isodate("2014-02-28t06:22:59z")

根據時間構造objectid

上例是直接使用mongodb提供的新建方法來構造objectid的,我們自己可不可以通過字串來構造呢?看下例:

// 使用date的字串構造方法生成日期

// 然後使用date物件的gettime獲取毫秒數,再除以1000得到標準時間戳

> a = new date("2012-12-12 00:00:00").gettime()/1000

1355241600

// 獲取時間戳的標準十六進製制表示

> a = a.tostring(16)

50c75880

// 在後面填補16個0

> a = a + new array(17).join("0")

50c758800000000000000000

// 使用24個字串構造objectid

> b = new objectid(a)

objectid("50c758800000000000000000")

// 獲取時間以驗證

> b.gettimestamp()

isodate("2012-12-11t16:00:00z")

上述過程中 new array(17).join(「0″)目的是生成16個0拼接的字串。

這裡使用了點小技巧。new array(17)構造了乙個17個元素的陣列,但是陣列裡面沒有元素,join(atr)方法的作用是連線陣列元素並且以其引數分割。17個元素正好有16個間隔,所以最終拼接起來的字串為16個。

根據objectid按照插入時間排序

mongodb預設在objectid上建立索引,是按照插入時間排序的。我們可以使用此索引進行查詢和排序。

// 按序插入三個文件

> db.col.insert()

> db.col.insert()

> db.col.insert()

> db.col.find().pretty()

// 按照_id公升序,即按照插入時間公升序

> db.col.find().sort().pretty()

// 按照_id降序,即按照插入時間降序

> db.col.find().sort().pretty()

// 抽取num = 2的objectid用來過濾

> num2 = objectid("53102fb9bf1044ed8b0ba36d")

objectid("53102fb9bf1044ed8b0ba36d")

// 找出插入時間在num2之後的資料

> db.col.find(}).pretty()

----------------------
python 獲取objectid (2.2版本以上)
from bson.objecti import objectid
idstr = '...........'
id = objectid('idstr')

MongoDB ObjectId詳解及使用

mongodb中我們經常會接觸到乙個自動生成的字段 id 型別為objectid。本文詳解objectid的構成和使用。之前我們使用mysql等關係型資料庫時,主鍵都是設定成自增的。但在分布式環境下,這種方法就不可行了,會產生衝突。為此,mongodb採用了乙個稱之為objectid的型別來做主鍵。...

MongoDB ObjectId詳解及使用

mongodb中我們經常會接觸到乙個自動生成的字段 id 型別為objectid。本文會詳解objectid的構成和使用。objectid構成 之前我們使用mysql等關係型資料庫時,主鍵都是設定成自增的。但在分布式環境下,這種方法就不可行了,會產生衝突。為此,mongodb採用了乙個稱之為obje...

showModalDialog引數詳解 使用方法

基本介紹 showmodaldialog ie 4 支援 showmodelessdialog ie 5 支援 window.showmodaldialog 方法用來建立乙個顯示html內容的模態對話方塊。window.showmodelessdialog 方法用來建立乙個顯示html內容的非模態對...