MongoDB中的数据类型
一、核心数据类型详解
-
ObjectId
• 结构:12字节十六进制值,包含3部分
◦ 4字节:UNIX时间戳(精确到秒)
◦ 5字节:机器标识符(3字节)+ 进程ID(2字节)
◦ 3字节:自增计数器(初始随机值)
• 用途:作为文档唯一主键(_id字段),保证分布式环境下的全局唯一性 -
String
• 编码规范:强制使用UTF-8编码,支持多语言文本存储
• 示例:{ "name": "张三" } -
数值类型
• Integer:
◦ 32位(NumberInt)范围:-2³¹ ~ 2³¹-1
◦ 64位(NumberLong)范围:-2⁶³ ~ 2⁶³-1
• Double:64位浮点数(默认小数类型)
• Decimal128:高精度十进制数,适用于金融计算(如NumberDecimal("3.1415")) -
Boolean
• 严格语法:仅接受小写true/false,大写会报错
• 错误示例:{ "active": True }(Python语法不适用) -
Timestamp
• 内部结构:
◦ 前32位:UNIX时间戳(秒)
◦ 后32位:操作序数(同一秒内的递增计数器)
• 与Date区别:Date存储毫秒级时间,Timestamp用于内部版本控制
二、复合数据类型
-
Array
• 特性:支持混合类型元素(如[1, "text", true])
• 查询优化:可对数组元素单独创建索引(多键索引) -
Object(嵌入式文档)
• 嵌套层级:最大支持100层嵌套
• 示例:{ "address": { "city": "北京", "geo": { "lat": 39.9042, "lng": 116.4074 } } }
三、特殊用途类型
-
Binary Data
• 子类型:包含通用二进制(0x00)、UUID(0x04)、加密数据(0x06)等
• 应用场景:存储图片、音视频等二进制文件(需配合GridFS处理大文件) -
Code
• 两种形式:
◦JavaScript:普通代码片段
◦JavaScript with scope:带作用域的代码(已弃用) -
Regular Expression
◦ 语法兼容:支持PCRE规范的正则表达式
◦ 示例:{ "pattern": /^test/i }
四、其他补充类型
-
Symbol(已弃用)
◦ 历史用途:优化特定语言的符号处理(如Ruby),现推荐使用String -
Min/Max Key
◦ 内部类型:表示比较时的最小/最大值($minKey/$maxKey) -
Null
◦ 语义差异:显式空值null与字段不存在($exists: false)不同
五、数据类型最佳实践
-
数值精度选择
• 金额计算必须用Decimal128避免浮点误差
• 计数器优先用NumberLong防止溢出 -
时间处理建议
• 业务时间用Date类型(自动转ISO格式)
• 数据版本控制用Timestamp -
二进制存储限制
• 单个文档最大16MB,超过需用GridFS分块存储 -
类型检查操作
• 使用$type运算符过滤字段类型(如db.col.find({field: {$type: "string"}}))
如需查看具体数据类型的BSON编码规则或索引优化策略,可参考官方文档或上述引用来源。

浙公网安备 33010602011771号