mongo简介——BSON
既然是简介,当然就是一个大纲性质的东西。
内容太多加上时间有限,要分成好几篇发。
第一部分,mongodb的数据存储格式——BSON
BSON是类似JSON的二进制数据格式,所有数据类型可以分为_ID、字符串、数字、日期时间、大字段blob、数组和自定义类型。
每个文档保存时,开头四字节表示文档的尺寸;每个键值对的键以表示属性类型的数字开头(究竟这些数据类型的数字编码是什么我也没找到相应的资料,有知道的同学请告知。目前只知道7是ObjectID,2是字符串),中间是属性名,属性以null结束,所有属性都由字符串保存;接下来就是键值。
_ID,一个文档只能有一个;如果不指定,MONGO会在保存数据时按如下规则自动生成。
自动生成的_ID类型叫做和ObjectID,一个自动生成的_ID占12字节,开头四字节是从公元元年开始的秒数,接下来三字节是机器id,接下来两字节是进程id,最后三字节是进程局部计数器,每创建一个文档,计数器自动增1。
mongo的每种数据类型都有一个整数编号。可以使用$type查询命令配置类型编号查询指定文档属性是指定类型编号的那些文档。
ObjectId:类型编号是7。默认的文档主键。
字符串:类型编号是2。mongo的字符串必须是UTF8格式保存到文档。
数字类型:类型编号是1。mongo支持的数字类型分别是double/int/long,对应的javascript类型是NumberLong NumberInt NumberDouble,mongo不支持定点小数。
日期时间:类型编号是9。是带符号的64位整数毫秒数,月份从0开始(即January对应的月份是0,December对应的月份是11),是从1970-1-1午夜开始的协调世界时。
布尔型:类型编号是8。取值只有true或false。
正则表达式:类型编号是11。可以把正则表达式作为值保存。
数组:没找到类型编号,有知道的朋友请告知。按照javascript或json数组理解即可。
文档类型:类型编号是3。
自定义类型:也就是前面提过的文档嵌套,子文档作为自定义类型存在。
函数/代码:类型编号是13。可保存JAVASCRIPT代码。
二进制类型:不知道类型编号。可保存二进制数据,相当于RDBMS的blob。
空值:类型编号是10。nil(注意这里可不是null也不是NULL了,而是nil)
undefined:类型编号是6。表示未定义类型
可能是版本的原因,官网给出的类型编号跟我测试的结果不一样。