發(fā)現(xiàn)問(wèn)題
最近將一個(gè)程序的存儲(chǔ)遷移到了mongodb,發(fā)現(xiàn)了一個(gè)現(xiàn)象,guid類型寫入后,在程序里面讀取的和用客戶端工具展示的不一樣,一個(gè)簡(jiǎn)單的示例如下:
1
2
|
var doc = new {_id = 1, value = guid.parse( "{b63932bb-9688-432b-b3a0-c4ae3fd2696a}" ) }; collection.insertone(doc.tobsondocument()); |
寫入db后,我們從客戶端工具來(lái)查看它:
通過(guò)對(duì)比可以發(fā)現(xiàn),展示的值和寫入的形式不一樣,但是讀取到的值卻是沒(méi)有問(wèn)題的。這個(gè)問(wèn)題可以從官方的文檔規(guī)范中找到答案:
官方文檔:
mongodb中是將uuid其作為二進(jìn)制類型存儲(chǔ)的,用一個(gè)subtype來(lái)標(biāo)記其類型為uuid,在對(duì)c#,java,python提供的驅(qū)動(dòng)中,默認(rèn)是將其子類型映射了為3(legacy uuid),這個(gè)在客戶端工具中也是有所展示的:
實(shí)際上,大多數(shù)客戶端工具也是能支持將legacy uuid展示成我們寫入時(shí)候的那個(gè)樣子。
解決方法
雖然這個(gè)不影響程序的功能,但由于第一眼看到的字符串不是寫入的格式,很多時(shí)候是影響我們調(diào)試程序的。一個(gè)較好的解決方法是默認(rèn)將以標(biāo)準(zhǔn)的uuid格式存儲(chǔ),只需要設(shè)置一個(gè)全局配置即可:
1
|
bsondefaults.guidrepresentation = guidrepresentation.standard; |
這樣就方便多了:
參考文章:
mongodb best practices for uuid data
總結(jié)
以上就是mongodb中關(guān)于guid的顯示問(wèn)題的詳細(xì)內(nèi)容,更多關(guān)于mongodb中g(shù)uid顯示問(wèn)題的資料請(qǐng)關(guān)注服務(wù)器之家其它相關(guān)文章!
原文鏈接:https://www.cnblogs.com/TianFang/p/12797351.html