_id 是mongoDB中唯一的主鍵兔毒,MongoDB中存儲(chǔ)的文檔必須有一個(gè)"_id"鍵, 無(wú)論用戶是否設(shè)置都將自動(dòng)生成,其類型為ObjectId. 在一個(gè)集合里面贴硫,每個(gè)文檔都有唯一的"_id"值孵户,來(lái)確保集合里面每個(gè)文檔都能被唯一標(biāo)識(shí)环揽。
ObjectId 是一個(gè)12字節(jié) BSON 類型數(shù)據(jù),有以下格式:
前4個(gè)字節(jié)表示時(shí)間戳
接下來(lái)的3個(gè)字節(jié)是機(jī)器標(biāo)識(shí)碼
緊接的兩個(gè)字節(jié)由進(jìn)程id組成(PID)
最后三個(gè)字節(jié)是隨機(jī)數(shù)吨拗。
0|1|2|3 | 4|5|6 | 7|8 | 9|10|11
時(shí)間戳 | 機(jī)器 | PID | 計(jì)數(shù)器
在使用MongoTemplate 保存數(shù)據(jù)的時(shí)候满哪,如果數(shù)據(jù)源中數(shù)據(jù)的_id已經(jīng)存在,則會(huì)更改原有的數(shù)據(jù)劝篷,如果不存在則進(jìn)行新增操作哨鸭。
如果自己設(shè)置數(shù)據(jù)鏈接池,則如果數(shù)據(jù)中的_id在數(shù)據(jù)庫(kù)中已存在娇妓,則不能進(jìn)行保存操作像鸡,否則會(huì)產(chǎn)生錯(cuò)誤。