時(shí)間:2024-03-26 14:43作者:下載吧人氣:31
MongoDB `ObjectId` 是每個(gè)文檔唯一表示的,類似于一個(gè)全局遞增的ID.在插入數(shù)據(jù)時(shí)可以不需要指定_id,這樣它會通過自增的方式生成一個(gè)_id. 自增的MongoDB的實(shí)現(xiàn)方法有很多,本文將主要介紹使用`ObjectId`來實(shí)現(xiàn)自增Id的方法.
### 使用ObjectId實(shí)現(xiàn)MongoDB的自增Id
要實(shí)現(xiàn) MongoDB 自增Id,可以使用這樣一行代碼:
MyDB.collection.insert( { "_id": new ObjectId() } );
上述代碼將會插入一條帶有自增Id的記錄到數(shù)據(jù)庫。如果你想要限制自增Id的增長,可以使用 `ObjectId(“hexadecimal_string”)` 方法來定義指定的唯一Id,如下所示:
MyDB.collection.insert( { "_id": new ObjectId(“hexadecimal_string) } );
### ObjectId包含信息
`ObjectId` 并不僅僅只是一個(gè)遞增的數(shù)字,它實(shí)際上由12個(gè)十六進(jìn)制的字母組成,包含了生成這個(gè)ID的時(shí)間、機(jī)器、進(jìn)程以及偽隨機(jī)序列。由此可見,不需要為每條文檔手動指定_id,MongoDB 在插入文檔時(shí)可以為我們自動生成唯一的 ObjectId。
### 優(yōu)點(diǎn)及缺點(diǎn)
自增MongoDB的自增Id`ObjectId`有一定的優(yōu)點(diǎn)及缺點(diǎn):
優(yōu)點(diǎn):
– 與性能無關(guān),MongoDB 對_id自增是有內(nèi)置優(yōu)化的,所以不用擔(dān)心自增ID會帶來性能問題
– 生成的ObjectId打包更多的信息,不僅是遞增的ID而且還包括系統(tǒng)時(shí)間,機(jī)器
缺點(diǎn):
– 自增Id不安全,因?yàn)樗赡軙徊聹y到,進(jìn)而導(dǎo)致把數(shù)據(jù)暴露出去
– 不支持分庫分表規(guī)則,ObjectId 無法區(qū)分不同的庫表,因此不能作為分布式數(shù)據(jù)庫的主鍵
### 結(jié)論
從上文可以看出,自增MongoDB的自增Id`ObjectId`可以通過簡單的代碼一行代碼實(shí)現(xiàn),不容易出現(xiàn)性能問題,但它不安全且也不支持分庫分表規(guī)則,需要注意。
網(wǎng)友評論