MongoDB中的数据类型

一、核心数据类型详解

  1. ObjectId
    结构:12字节十六进制值,包含3部分
    ◦ 4字节:UNIX时间戳(精确到秒)
    ◦ 5字节:机器标识符(3字节)+ 进程ID(2字节)
    ◦ 3字节:自增计数器(初始随机值)
    用途:作为文档唯一主键(_id字段),保证分布式环境下的全局唯一性

  2. String
    编码规范:强制使用UTF-8编码,支持多语言文本存储
    示例{ "name": "张三" }

  3. 数值类型
    Integer
    ◦ 32位(NumberInt)范围:-2³¹ ~ 2³¹-1
    ◦ 64位(NumberLong)范围:-2⁶³ ~ 2⁶³-1
    Double:64位浮点数(默认小数类型)
    Decimal128:高精度十进制数,适用于金融计算(如NumberDecimal("3.1415")

  4. Boolean
    严格语法:仅接受小写true/false,大写会报错
    错误示例{ "active": True }(Python语法不适用)

  5. Timestamp
    内部结构
    ◦ 前32位:UNIX时间戳(秒)
    ◦ 后32位:操作序数(同一秒内的递增计数器)
    与Date区别:Date存储毫秒级时间,Timestamp用于内部版本控制


二、复合数据类型

  1. Array
    特性:支持混合类型元素(如[1, "text", true]
    查询优化:可对数组元素单独创建索引(多键索引)

  2. Object(嵌入式文档)
    嵌套层级:最大支持100层嵌套
    示例

    { 
      "address": {
        "city": "北京", 
        "geo": { "lat": 39.9042, "lng": 116.4074 }
      }
    }
    

三、特殊用途类型

  1. Binary Data
    子类型:包含通用二进制(0x00)、UUID(0x04)、加密数据(0x06)等
    应用场景:存储图片、音视频等二进制文件(需配合GridFS处理大文件)

  2. Code
    两种形式
    JavaScript:普通代码片段
    JavaScript with scope:带作用域的代码(已弃用)

  3. Regular Expression
    语法兼容:支持PCRE规范的正则表达式
    示例{ "pattern": /^test/i }


四、其他补充类型

  1. Symbol(已弃用)
    历史用途:优化特定语言的符号处理(如Ruby),现推荐使用String

  2. Min/Max Key
    内部类型:表示比较时的最小/最大值($minKey/$maxKey

  3. Null
    语义差异:显式空值null与字段不存在($exists: false)不同


五、数据类型最佳实践

  1. 数值精度选择
    • 金额计算必须用Decimal128避免浮点误差
    • 计数器优先用NumberLong防止溢出

  2. 时间处理建议
    • 业务时间用Date类型(自动转ISO格式)
    • 数据版本控制用Timestamp

  3. 二进制存储限制
    • 单个文档最大16MB,超过需用GridFS分块存储

  4. 类型检查操作
    • 使用$type运算符过滤字段类型(如db.col.find({field: {$type: "string"}})


如需查看具体数据类型的BSON编码规则或索引优化策略,可参考官方文档或上述引用来源。

posted @ 2025-03-26 21:21  千陌666  阅读(73)  评论(0)    收藏  举报