Mongodb中GUID的显示问题

Posted TianFang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mongodb中GUID的显示问题相关的知识,希望对你有一定的参考价值。

最近将一个程序的存储迁移到了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的API为:   

  BsonSerializer.RegisterSerializer(new GuidSerializer(GuidRepresentation.Standard));

这样就方便多了:

    

参考文章:

MongoDB Best Practices for UUID Data

 

以上是关于Mongodb中GUID的显示问题的主要内容,如果未能解决你的问题,请参考以下文章

一起显示具有相同 GUID 的字段[重复]

SQL Server GUID 数据迁移至MongoDB后怎样查看?

如何使用 MongoDB 以编程方式预拆分基于 GUID 的分片键

MongoDB + C#:未选择/使用 GUID 字段上的复合索引

powershell PowerShell:显示/返回与GUID相关的CSE组件名称列表

MongoDB 显示所有集合中的所有内容