1. 程式人生 > 資料庫 >Mongodb中關於GUID的顯示問題詳析

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

發現問題

最近將一個程式的儲存遷移到了Mongodb,發現了一個現象,Guid型別寫入後,在程式裡面讀取的和用客戶端工具展示的不一樣,一個簡單的示例如下:

 var doc = new {_id = 1,Value = Guid.Parse("{B63932BB-9688-432B-B3A0-C4AE3FD2696A}") };
 collection.InsertOne(doc.ToBsonDocument());

寫入DB後,我們從客戶端工具來檢視它:

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

通過對比可以發現,展示的值和寫入的形式不一樣,但是讀取到的值卻是沒有問題的。這個問題可以從官方的文件規範中找到答案:

官方文件: http://bsonspec.org/spec.html

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

Mongodb中是將uuid其作為二進位制型別儲存的,用一個subtype來標記其型別為uuid,在對C#,java,python提供的驅動中,預設是將其子型別映射了為3(Legacy UUID),這個在客戶端工具中也是有所展示的:

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

實際上,大多數客戶端工具也是能支援將Legacy UUID展示成我們寫入時候的那個樣子。

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

解決方法

雖然這個不影響程式的功能,但由於第一眼看到的字串不是寫入的格式,很多時候是影響我們除錯程式的。一個較好的解決方法是預設將以標準的UUID格式儲存,只需要設定一個全域性配置即可:

 BsonDefaults.GuidRepresentation = GuidRepresentation.Standard; 

這樣就方便多了:

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

參考文章:

MongoDB Best Practices for UUID Data

總結

以上就是Mongodb中關於GUID的顯示問題的詳細內容,更多關於Mongodb中GUID顯示問題的資料請關注我們其它相關文章!