基于本文回答

播面 播面

文图音视,全方位拆解八股文
0
评论

MongoDB 支持哪些数据类型?

知识点图片

MongoDB 使用 BSON (Binary JSON) 格式来存储数据。BSON 是 JSON 的二进制表示形式,它不仅支持 JSON 的所有数据类型,还扩展了许多 JSON 没有的数据类型(如日期、二进制数据等)。

以下是 MongoDB 支持的主要数据类型,按常用程度分类:

1. 核心常用类型

  • String (字符串): UTF-8 编码的字符串。这是最常用的数据类型。
    • 示例: "Hello World"
  • ObjectId (对象 ID): MongoDB 中文档的默认主键 (_id) 类型。它是一个 12 字节的十六进制值,具有唯一性,包含时间戳、机器标识、进程 ID 和计数器。
    • 示例: ObjectId("507f1f77bcf86cd799439011")
  • Boolean (布尔值): 存储 truefalse
  • Array (数组): 值的列表或集合。数组中可以包含不同类型的数据(字符串、数字、甚至嵌套文档)。
    • 示例: ["apple", "banana", 123]
  • Object / Embedded Document (嵌入式文档): 一个文档内部可以包含另一个 BSON 文档。
    • 示例: {"address": {"city": "Beijing", "zip": 100000}}
  • Null: 用于表示空值或不存在的字段。

2. 数值类型

在 MongoDB 中,数值不仅仅是“数字”,还细分为以下几种以满足精度需求:

  • Double (双精度浮点数): 默认的数值类型。如果你在 Mongo Shell 中直接输入一个数字,它通常被视为 Double。
  • Integer (32-bit) (32位整数): 用于存储较小的整数。
    • Shell 中使用: NumberInt(10)
  • Integer (64-bit) (64位整数): 用于存储较大的整数。
    • Shell 中使用: NumberLong(10000000)
  • Decimal128: 128 位基于十进制的浮点数。非常重要,用于金融、货币计算等需要高精度的场景,避免浮点数计算误差。
    • Shell 中使用: NumberDecimal("9.99")

3. 日期与时间

  • Date (日期): 存储当前日期或时间。它是一个 64 位整数,表示自 Unix 纪元(1970年1月1日)以来的毫秒数。
    • 注意: MongoDB 存储的时间统一为 UTC 时间。
    • 示例: ISODate("2023-10-01T00:00:00Z")
  • Timestamp (时间戳): 注意与 Date 区分。这主要是 MongoDB 内部使用的数据类型(例如用于 Oplog 操作日志和数据同步),包含 64 位值(前 32 位是时间戳,后 32 位是操作序数)。一般业务开发中很少直接使用此类型,而是使用 Date

4. 特殊类型

  • Binary Data (二进制数据): 用于存储字节数组。通常用于存储图片、文件等(虽然大文件建议使用 GridFS)。
  • Regular Expression (正则表达式): 直接存储正则表达式,用于模式匹配查询。
    • 示例: /^abc/i
  • JavaScript: 存储 JavaScript 代码(可以带作用域或不带作用域)。
  • MinKey / MaxKey: 特殊类型,用于比较操作。MinKey 比较时小于所有其他类型,MaxKey 大于所有其他类型。

5. 已废弃或不推荐使用的类型

  • Undefined: 已废弃。
  • Symbol: 已废弃,通常转换为字符串处理。
  • DBPointer: 已废弃。

总结表

数据类型 说明
String UTF-8 字符串
Integer 32位或64位整数
Double 浮点数 (默认)
Decimal128 高精度小数 (金融用)
Boolean true / false
Null 空值
Array 数组/列表
Object 嵌入式文档
ObjectId 唯一的 12 字节 ID
Date 日期时间 (UTC)
Timestamp 内部时间戳 (通常用于复制集)
Binary Data 二进制数据
Regular Expression 正则表达式
00:00
00:00