MongoDB通过BSON(Binary JSON)来描述和存放数据。BSON是一种可进行二进制序列化的,类JSON格式的文档对象。通过BSON,MongoDB可以方便地存储无模式(scheme)数据。
| 类型 | 编号 | 别名 | 说明 |
|---|---|---|---|
| Double | 1 | “double” | |
| String | 2 | “string” | |
| Object | 3 | “object” | |
| Array | 4 | “array” | |
| Binary data | 5 | “binData” | |
| Undefined | 6 | “undefined” | Deprecated. |
| ObjectId | 7 | “objectId” | |
| Boolean | 8 | “bool” | |
| Date | 9 | “date” | |
| Null | 10 | “null” | |
| Regular Expression | 11 | “regex” | |
| DBPointer | 12 | “dbPointer” | Deprecated. |
| JavaScript | 13 | “javascript” | |
| Symbol | 14 | “symbol” | Deprecated. |
| JavaScript (with scope) | 15 | “javascriptWithScope” | |
| 32-bit integer | 16 | “int” | |
| Timestamp | 17 | “timestamp” | |
| 64-bit integer | 18 | “long” | |
| Decimal128 | 19 | “decimal” | New in version 3.4. |
| Min key | -1 | “minKey” | |
| Max key | 127 | “maxKey” |
ObjectId
具有12字节的唯一标识。MongoDB中,每条记录都有一个类似关系型数据库主键标识的_id字段来标识此条记录,如果没有设定文档记录的_id值,则通过ObjectId来生成_id。其具体组成如下:
- 4字节,Unix的时间戳
- 5字节,随机数值
- 3字节,计数器,从随机的起始值开始
String
BSON的字符串编码为UTF-8,UTF-8可以更好地支持各种语言文字,一般每种编程语言的MongoDB驱动会帮助处理字符串编码以符合要求。
Timestamps
BSON中的时间戳比较特别,他并不能直接对应到Date类型,而是通过如下方式组织64位数据:
- 前32位是从Unix纪元(1970.1.1)开始计算到现在时间的秒数
- 后32位是一秒内的操作序数
在一个单实例MongoDB中,时间戳是唯一的。如果对一个一级timestamp类型字段插入了空值,MongoDB会将空值替换成当前时间戳(从2.6版开始,之前的版本只会替换前两个字段)。
Date
BSON日期是一个64位的字段类型,存放了从Unix纪元(1970.1.1)开始计算的毫秒数计数时间。BSON日期是有符号类型的,负值代表1970.1.1之前的时间。
