数据类型
一、int
$type: "int"
表示 32
位 整型数据
二、bool
$type: "bool"
表示布尔值
三、date
$type: "date"
是一个 64
位整数,它表示自 UNIX
纪元(1970
年 1
月 1
日)以来的毫秒数。因此,过去与未来的可表示日期范围便可达到约 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
字段生成 ObjectId
。MongoDB
客户端应添加一个具有唯一 ObjectId
的 _id
字段。为 _id
字段使用 ObjectId
还能带来以下好处:
-
您可以使用
ObjectId.getTimestamp()
方法访问mongosh
中的ObjectId
创建时间。 -
ObjectID
大致按创建时间排序,但并非完全有序。在包含ObjectId
值的_id
字段上对集合排序,大致相当于按创建时间排序。但是, 仅有一秒的时间分辨率,因此在同一秒内创建的ObjectId
值不能保证顺序,并且由可能具有不同系统时钟的客户端生成。
十七、timestamp
$type: "timestamp"
时间戳。BSON
具一种特殊的时间戳类型,供 MongoDB
内部使用,与常规的 Date
类型无关。此内部时间戳类型是 64
位值,其中:
-
最高的
32
位有效位则是time_t
值(自UNIX
纪元以来的秒数) -
对于给定秒内的操作,最低有效的
32
位是递增的ordinal
。
虽然 BSON
格式是小端字节序,因此首先存储最低有效位,但在所有平台上,mongod
实例始终先比较 time_t
值,然后再比较 ordinal
值,不受字节序的影响。在复制中,oplog
有一个 ts
字段。该字段的值反映利用 BSON
时间戳值确定的操作时间。在单个 mongod
实例中,oplog
中的时间戳值总是唯一的。
十八、javascript
$type: "javascript"