MongoDB 数据类型
内容提要
本文介绍了MongoDB中的数据类型,包括常见和不常见类型。还讨论了使用Mongosh操作数据类型的方法,并提供了示例。同时讨论了UUID类型的存储和检索问题,并给出了建议和注意事项。
延伸解读
ObjectId 的唯一性与顺序性
ObjectId 由时间戳、随机值和递增计数器组成,通常随时间增加,但并非严格单调。同一秒内生成的 ObjectId 顺序无法保证,且不同客户端的系统时钟可能不同,因此不能依赖 ObjectId 进行精确排序。
数值类型的选择:Int32、Int64、Decimal128 与 Double
MongoDB 根据数值范围自动选择 Int32 或 Int64,也可在 Mongosh 中显式指定。Decimal128 提供 34 位十进制精度,适合货币等精确计算;Double 精度较低,适用于对精度要求不高的场景。
UUID 存储:子类型 3 与 4 的差异
在 C# 中,Guid 默认存储为子类型 3(旧版 UUID),可能导致查询和显示问题。使用 GuidRepresentation.Standard 可确保存储为子类型 4,便于在 Compass 中识别和查询。注意子类型 3 的 Base64 编码与子类型 4 不同,混用可能引发数据不一致。
二进制数据与字符串的取舍
二进制数据(如 UUID)比字符串存储更高效,占用空间更小且查询更快。对于 UUID,建议使用二进制子类型 4 而非字符串,以提升性能并避免转换开销。
Q&A
MongoDB支持哪些常见的数据类型?
MongoDB支持的常见数据类型包括ObjectId、Boolean、整数(Int32和Int64)、Decimal128、Double、String、Object、Array、Binary、Date、Timestamp和Null。
如何在MongoDB中使用Decimal128类型?
Decimal128用于处理货币数据,支持34位精度,适合需要精确小数的应用,如金融和科学计算。
ObjectId的结构是什么?
ObjectId由一个4字节的时间戳、一个5字节的随机值和一个3字节的递增计数器组成,具有唯一性和快速生成的特点。
MongoDB中的UUID类型有什么注意事项?
使用UUID时需注意旧版UUID和新版UUID的区别,建议使用GuidRepresentation.Standard以确保使用二进制子类型4。
MongoDB如何处理日期类型?
MongoDB的日期类型以自Unix纪元以来的毫秒数表示,范围约为29亿年,日期时间总是以UTC格式保存。
在MongoDB中,如何存储和检索二进制数据?
MongoDB允许存储原始二进制数据,如图像和音频文件,建议优先使用二进制数据,因为它比字符串更快且更小。