MongoDB数据类型

 2015年05月30日    1036     声明


MongoDB的文档与JavaScript中的对象相似,JavaScript中的数据交互格式是JSON格式,JSON只能表示6种数据格式:null、布尔、数字、字符串、数据、对象。MongoDB数据保存使用二进制形式JSON存储格式,即:BSON格式,在保留了JSON的键-值对表示特性的基础上,扩展了一些数据类型。

MongoDB在JSON 6种数据类型的基础上添加了其它一些数据类型,在不同的编程环境下,这些数据类型的表示会有些差异。

  1. null
  2. 布尔型
  3. 数值类型
  4. 字符串
  5. 日期
  6. 正则表达式
  7. 数组
  8. 内嵌文档
  9. _id和ObjectId
  10. 代码
  11. 二进制


1 null

null用于表示空值或不存在的字段。示例如下:

{"x" : null}


2 布尔

布尔型数据有true和false两个值。示例如下:

{"x" : true}


3 数值类型

在Mongo shell中,默认使用64位浮点型数据。因此,会有以下两种数值形式:

{"x" : 2.32}
//或
{"x" : 2}

对于整数类型,可以使用NumberInt()(位有符号整型)或NumberLong()(8位有符号整型)方法进行转换。示例如下:

{"x" : NumberInt(2)}
{"x" : NumberLong(2)}


4 字符串

MongoDB中字符串类型使用UTF-8编码的字符表示。示例如下:

{"x" : "itbilu.com"}


5 日期

MongoDB中日期使用时间戳表示,单位为毫秒,不存储时区。示例如下:

{"x" : new Date()}

创建日期对象时应该使用new Date(),而非构造函数Date()。将构造函数作为函数时返回的日期格式是字符串,而非日期对象(与JavaScript工作机制有关)。


6 正则表达式

MongoDB中可使用与JavaScript相同的正则表达式进行查询筛选等。示例如下:

{"x" : /itbilu/i}


7 数组

数据集可以用数组格式存储,与JavaSript中的数组表示相同。示例如下:

{"x" : ["itbilu", "itbilu.com"]}

数组中可以包含不同类型的数据元素,包括内嵌文档和数组等。所有MongoDB中键-值对支持的数据类型都可以用做数组的值。


8 内嵌文档

文档中可以嵌套一个子文档。在MongoDB文档总大小限制为16MB,建议使用子文档的形式组织数据,子文档查询效率要高于多键查询。示例如下:

{"x" : {"itbilu" : "itbilu.com"}}

文档可以做为键的值,即:内嵌文档。MongoDB与关系型数据库相比,最大的优势就是内嵌文档。与关系型数据库的扁平化数据结构相比,使用内嵌文档可以数据的组织方式更加自然。


9 _id和ObjectId

MongoDB中每个文档都有一个"_id"键,"_id"可以是任何类型,不指"_id"时MongoDB会生成一个ObjectId对象。。示例如下:

{"_id" : ObjectId()}

ObjectId是一个12字节(24个十六进制数字)的存储空间,ObjectId的12字节数据组织方式如下:

 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11
     时间戳     |  机器码    |  PID  |  计数器

对于如下一个ObjectId,其各位字符含义为:

{"_id" : ObjectId("5444cce6aef53b0f343e2b9b")}

/* 上面ObjectId各位字符含义如下 */
//5444cce6,第0〜3字节(第1〜8位)为时间戳
//aef53b,第4〜6字节(第9〜14位)为机器码
//0f34,第7〜8字节(第15〜18位)为进程ID
//3e2b9b,第9〜11字节(第19〜24位)为自增计数器


10 代码

MongoDB的文档和代码中可以包括JavaScript代码。示例如下:

{"x" : function(){ /*这里是一段JavaScript代码*/}}


11 二进制数据

二进制数据是一个二进制字节的字作串,要保存非UTF-8字符到数据库中,只能使用十进制数据。