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 Best Practices for UUID Data

总结

以上就是Mongodb中关于GUID的显示问题的详细内容,更多关于Mongodb中GUID显示问题的资料请关注我们其它相关文章!

(0)

相关推荐

  • Mongodb中关于GUID的显示问题详析

    发现问题 最近将一个程序的存储迁移到了Mongodb,发现了一个现象,Guid类型写入后,在程序里面读取的和用客户端工具展示的不一样,一个简单的示例如下: var doc = new {_id = 1, Value = Guid.Parse("{B63932BB-9688-432B-B3A0-C4AE3FD2696A}") }; collection.InsertOne(doc.ToBsonDocument()); 写入DB后,我们从客户端工具来查看它: 通过对比可以发现,展示的值和写

  • MongoDB中的参数限制与阀值详析

    前言 今天搜索spark mongo的资料,意外发现了MongoDB的一些知识,这些都是之前没有接触过的,所以专门记录下. (๑• . •๑) 下面话不多说了,来一起看看详细的介绍吧 一.BSON文档 BSON文档尺寸:一个document文档最大尺寸为16M:大于16M的文档需要存储在GridFS中. 文档内嵌深度:BSON文档的结构(tree)深度最大为100. 二.Namespaces collection命名空间:.,最大长度为120字节.这也限定了database和collection

  • Mongodb中MapReduce实现数据聚合方法详解

    Mongodb是针对大数据量环境下诞生的用于保存大数据量的非关系型数据库,针对大量的数据,如何进行统计操作至关重要,那么如何从Mongodb中统计一些数据呢? 在Mongodb中,给我们提供了三种用于数据聚合的方式: (1)简单的用户聚合函数: (2)使用aggregate进行统计: (3)使用mapReduce进行统计: 今天我们首先来讲讲mapReduce是如何统计,在后续的文章中,将另起文章进行相关说明. MapReduce是啥呢?以我的理解,其实就是对集合中的各个满足条件的文档进行预处理

  • YOLOv5中SPP/SPPF结构源码详析(内含注释分析)

    目录 一.SPP的应用的背景 二.SPP结构分析 三.SPPF结构分析 四.YOLOv5中SPP/SPPF结构源码解析(内含注释分析) 总结 一.SPP的应用的背景 在卷积神经网络中我们经常看到固定输入的设计,但是如果我们输入的不能是固定尺寸的该怎么办呢? 通常来说,我们有以下几种方法: (1)对输入进行resize操作,让他们统统变成你设计的层的输入规格那样.但是这样过于暴力直接,可能会丢失很多信息或者多出很多不该有的信息(图片变形等),影响最终的结果. (2)替换网络中的全连接层,对最后的卷

  • Spring Data MongoDB中实现自定义级联的方法详解

    前言 Spring Data MongoDB 项目提供与MongoDB文档数据库的集成,Spring与Hibernate集成时,Spring提供了org.springframework.orm.hibernate3.HibernateTemplate实现了对数据的CRUD操作, Spring Data MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的CRUD的操作,包括对集成的对象映射文件和POJO之间的

  • mongoDB中聚合函数java处理示例详解

    1.问题 最近在做项目的时候碰到一个对mongoDB的数据处理,从MongoDB中拿到内嵌文档的时间排序的list. 一开始考虑到直接对mongoDB中的属性排序,后面发现属性存在内嵌文档中,所以处理中需要用到聚合函数. 思考 (key)解决这个问题的过程让我学到很多,发现自己在解决一个问题不仅查找问题的姿势不对,浪费太多时间.而且在碰到问题之后,应该多看看解决办法,甚至解决了之后要去思考问题,回顾问题.而不是像以前一样,解决问题了就万事大吉,抛之脑后. 2.解决 需要对document中的一个

  • 关于MongoDB谨防索引seek的效率问题详析

    背景 最近线上的一个工单分析服务一直不大稳定,监控平台时不时发出数据库操作超时的告警. 运维兄弟沟通后,发现在每天凌晨1点都会出现若干次的业务操作失败,而数据库监控上并没有发现明显的异常. 在该分析服务的日志中发现了某个数据库操作产生了 SocketTimeoutException. 开发同学一开始希望通过调整 MongoDB Java Driver 的超时参数来规避这个问题. 但经过详细分析之后,这样是无法根治问题的,而且超时配置应该如何调整也难以评估. 下面是关于对这个问题的分析.调优的过程

  • python中字符串的编码与解码详析

    1. 常用的编码 ASCII:只能表示一些字母,数字和特殊的字符,占一个字节 GBK:国家简体中文字符集和繁体字符集,兼容ASCII,占两个字节 Unicode:能够表示全世界上所有的字符,Unicode有人说占4个字节也有人说占2个字节,但中文占2个字节 UTF-8:Unicode的压缩版,占1~3个字节,其中中文占三个字节 2.补充:计算机表示的单位: bit: 位,计算机最小的表示单位 bytes:字节,最小的存储单位,1bytes=8bit,1bytes简写成1B 1KB = 1024B

  • PyTorch中view()与 reshape()的区别详析

    目录 前言 一.PyTorch中tensor的存储方式 1.PyTorch张量存储的底层原理 2.PyTorch张量的步长(stride)属性 二.对“视图(view)”字眼的理解 三.view() 和reshape() 的比较 1.对 torch.Tensor.view() 的理解 2.对 torch.reshape() 的理解 四.总结 前言 总之,两者都是用来重塑tensor的shape的.view只适合对满足连续性条件(contiguous)的tensor进行操作,而reshape同时还

  • JavaScript中的this例题实战总结详析

    目录 前言 普通函数中的 this 箭头函数中的 this 函数作为对象的方法中的 this 上下文对象调用中的 this 在构造函数中的 this call,apply,bind 显式修改 this 指向 this 优先级 箭头函数的 this 绑定无法修改 从手写 new 操作符中去理解 this 从手写 call.apply.bind 中去理解 this 手写 call 的实现 手写 apply 的实现 手写 bind 的实现 为什么显式绑定的 this 要比隐式绑定的 this 优先级要

随机推荐