跳到主要内容

数据类型

2025年02月25日
柏拉文
越努力,越幸运

一、int


$type: "int" 表示 32 整型数据

二、bool


$type: "bool" 表示布尔值

三、date


$type: "date" 是一个 64 位整数,它表示自 UNIX 纪元(1970 11 日)以来的毫秒数。因此,过去与未来的可表示日期范围便可达到约 2.9 亿年。

四、null


$type: "null"

五、long


$type: "long" 表示 64 位整数

六、array


$type: "array"

七、regex


$type: "regex"

八、double


$type: "double" 表示 64 位带符号浮点数

九、minKey


$type: "minKey"

十、maxKey


$type: "maxKey"

十一、string


$type: "string" 字符串, UTF-8 编码。

十二、object


$type: "object"

十三、number


$type: "number" 表示 Int 32 位整型数据Long 64 位整型数据Double 浮点数据Decimal128 数据

十四、binData


$type: "binData"

十五、decimal


$type: "decimal" 表示基于十进制的 128 位高精度浮点数,它们模拟了精确的十进制舍入。此数据适用于处理货币数据(例如财务、税收和科学计算)的应用程序。Decimal128BSON 类型使用 IEEE 754 十进制 128 浮点编号格式,支持 34 个十进制数字(即 有效数字),指数范围为 −6143+6144

十六、objectId


$type: "objectId" 对象标识符, 可能是唯一的,生成速度快并且是有序的。ObjectId 值的长度为 12 个字节,包含:

  • 一个 4 字节时间戳,它表示 ObjectId 的创建时间,并以自 UNIX 纪元以来的秒数为单位进行测量。

  • 每个进程会生成一次 5 字节随机值。这个随机值对于机器和进程是唯一的。

  • 三字节递增计数器(初始化为随机值)。

对于时间戳和计数器值,最高有效字节在字节序列中最先出现(大端字节序)。对于其他 BSON 值,最低有效字节最先出现(小端字节序)。如果使用整数值创建对象标识符(ObjectId),则该整数将替换时间戳。

MongoDB 中,存储在标准集合中的每个文档都需要一个唯一的 _id 字段作为主键。如果插入的文档省略了_id 字段,则MongoDB 驾驶员会自动为 _id 字段生成 ObjectIdMongoDB 客户端应添加一个具有唯一 ObjectId_id 字段。为 _id 字段使用 ObjectId 还能带来以下好处:

  1. 您可以使用 ObjectId.getTimestamp() 方法访问 mongosh 中的 ObjectId 创建时间。

  2. ObjectID 大致按创建时间排序,但并非完全有序。在包含 ObjectId 值的 _id 字段上对集合排序,大致相当于按创建时间排序。但是, 仅有一秒的时间分辨率,因此在同一秒内创建的 ObjectId 值不能保证顺序,并且由可能具有不同系统时钟的客户端生成。

十七、timestamp


$type: "timestamp" 时间戳。BSON 具一种特殊的时间戳类型,供 MongoDB 内部使用,与常规的 Date 类型无关。此内部时间戳类型是 64 位值,其中:

  1. 最高的 32 位有效位则是 time_t 值(自 UNIX 纪元以来的秒数)

  2. 对于给定秒内的操作,最低有效的 32 位是递增的 ordinal

虽然 BSON 格式是小端字节序,因此首先存储最低有效位,但在所有平台上,mongod 实例始终先比较 time_t 值,然后再比较 ordinal 值,不受字节序的影响。在复制中,oplog 有一个 ts 字段。该字段的值反映利用 BSON 时间戳值确定的操作时间。在单个 mongod 实例中,oplog 中的时间戳值总是唯一的。

十八、javascript


$type: "javascript"