数据结构:
简单的说: 1. 文档(document)是MongoDB中最基本的数据组织形式,每个文档以Key-Value(键-值对)的方式组织起来
例如:
{"greeting" : "Hello World!"}
2. 一个文档可以有多个Key-Value组合,每个Value可以是不同的类型,比如String、Integer、List等等
例如:
1.{ "name" : "huangz",
2. "sex" : "male",
3. "age" : 20 }
3.将多个文档组织起来,就形成了集合(collection)。如果将文档比作关系数据库中的行(row)的话,那么集合就是数据库中的表(table)。
在关系数据库(如MySQL)中,在同一个数据库表里面,总是有相同的行(row),比如你有一个student表,里面有id,name,age,class,grade几个row,那么整个student只能有相同的几个行。
但是在MongoDB当中,内容格式可以很随意,在一个集合中,储存多个有不同Key、不同类型的文档,比如你可以在一个student集合里面,有如下格式的文档:
在这个student集合里面,并不要求每个文档都要有同样的Key和同样的类型,一切随意。
1.{
2. "name" : "huangz",
3. "age" : 20,
4. "sex" : "male"
5.}
6.
7.{
8. "name" : "jack",
9. "class" : 3,
10. "grade" : 3
11.}
总结起来,MongoDB组织数据的方式如下:
Key-Value对 > 文档 > 集合 > 数据库
另外,在MongoDB中(不包括GridFS),单个文档大小不得超过4mb(版本>=1.7则是16MB)。
Key的遵循以下规则:
"\0"不能使用
带有"."号,"_"号和"$"号前缀的Key被保留
大小写有区别,Age不同于age
同一个文档不能有相同的Key
除了上面几条规则外,其他所有UTF-8字符都可以使用
集合的命名规则和文档的命名规则大概相似,另外要记住的是
system集合是被保留的
另外,“.”号的使用在集合当中是允许的,它们被成为子集合(Subcollection);比如你有一个blog集合,你可以使用blog.title,blog.content或者blog.author来帮组你更好地组织集合。
将多个集合组织起来,就形成了数据库(database)。单个MongoDB实例可以使用多个数据库,每个数据库都是独立运作的,可以有单独的权限,每个数据库的数据被分开保存在不同的文件里。
数据库也有命名规则:
不能使用空字符""或者空格" "、点号"."、美元符"$"、斜线"/"、反斜线"\"和"\0"
只能用小写
必须少于64个字节(byte)
数据类型:
1./* 空值 null */
2.
3.{ "name" : null }
4.
5./* 布尔值 boolean */
6.
7.{ "flag" : true }
8.
9./* 数值
10. 包括32bit、64bit整数integer类型和64bit浮点floating point类型 */
11.
12.{
13. "copies" : 300,
14. "price" : 60.8
15.}
16.
17./* 字符串 string */
18.
19.{ "dbname" : "MongoDB" }
20.
21./* 日期 date */
22.
23.{ "post_time" : new Date() }
24.
25./* 正则表达式 regular expression */
26.
27.{ "name_match" : /huangz/i }
28.
29./* 数组类型 array */
30.
31.{ "tags" : ["mongodb", "nosql"] }
32.
33./* 嵌套文档 embedded document
34. 一个文档里面Key的值可以是另外一个文档 */
35.
36.{
37. "name" : "huangz",
38. "phone" : { "home" : 123321,
39. "mobile" : 15820123123}
40.}
41.
42./* id
43. 每个MongoDB文档都必须有一个叫作"_id"的Key, 同一集合里面的文档_id必须各不相同。
44. id可以在创建文档的时候指定,可以是任何类型,无指定时,默认使用ObjectId对象,自动生成不同的id。
45.
46. ObjectId对象生成id(12位)的规则如下:
47. 0-3 : Timestamp,时间撮
48. 4-6 : Machine,机器代码
49. 7-8 : PID,MongoDB的程序id
50. 9-11: Increment,一个自增量
51.*/
52.
53.{ "_id" : ObjectId("4da025ac5149e6d915098c59"), "name" : "huangz", "phone" : { "home" : 33123123, "mobile" : 15820123123 } } |