歡迎您光臨本站 註冊首頁

Mongodb中關於GUID的顯示問題詳析

←手機掃碼閱讀     qp18502452 @ 2020-05-09 , reply:0

發現問題
最近將一個程式的儲存遷移到了Mongodb,發現了一個現象,Guid型別寫入後,在程式裡面讀取的和用客戶端工具展示的不一樣,一個簡單的示例如下:
var doc = new {_id = 1, Value = Guid.Parse("{B63932BB-9688-432B-B3A0-C4AE3FD2696A}") }; collection.InsertOne(doc.ToBsonDocument());
寫入DB後,我們從客戶端工具來檢視它:
透過對比可以發現,展示的值和寫入的形式不一樣,但是讀取到的值卻是沒有問題的。這個問題可以從官方的文件規範中找到答案:
官方文件: http://bsonspec.org/spec.html
Mongodb中是將uuid其作為二進位制型別儲存的,用一個subtype來標記其型別為uuid,在對C#,java,python提供的驅動中,預設是將其子型別映射了為3(Legacy UUID),這個在客戶端工具中也是有所展示的:
實際上,大多數客戶端工具也是能支援將Legacy UUID展示成我們寫入時候的那個樣子。
解決方法
雖然這個不影響程式的功能,但由於第一眼看到的字串不是寫入的格式,很多時候是影響我們除錯程式的。一個較好的解決方法是預設將以標準的UUID格式儲存,只需要設定一個全域性配置即可:
BsonDefaults.GuidRepresentation = GuidRepresentation.Standard;
這樣就方便多了:
參考文章:
MongoDB Best Practices for UUID Data


[qp18502452 ] Mongodb中關於GUID的顯示問題詳析已經有155次圍觀

http://coctec.com/docs/service/show-post-233414.html