认识MongoDB

 http://my.oschina.net/23102160/blog/101651

1.1 什么是MongoDB

 

这个去官方网站看http://www.mongodb.org

1.2 什么是文档(Document)

 

是多个键及其关联的值有序的放在一起就叫做文档,类似于关系型数据库里面的记录(行),通常表现形式就是键值:

1 {"name":"Mongo"}
2 {"name":"CC","type":"Beginer"}

键/值对是在NOSQL非常重要的一个概念。(Redis也是键值对,不过操作方式有区别)

CC:在这里面大小写是敏感的哦~

1.3 什么是集合(Collection)

 

说简单一点集合就相当于SQL里面的表,在MongoDB里面就是指的一组文档。

要查看当前数据库中的集合有两种方式:

1 > show collections
2 > show tables

第二种完全是为了配合那些关系型数据库的童鞋。

1.4 数据库

同理,多个集合组成就是数据库(感觉有点牵强)。数据库命名是有规则的,同样集合命名也有限制,数据库名满以下条件的UTF-8字符串都可以:

尽量小写,不能是空字符串,不得含有一些特殊符号比如”’’”(空白)、”.”、”$”、”/”、”\”、”\0”等,这样的符号(这些符号主要是为了避免冲突,在系统的默认代码中有的会使用),还有就是最多64个字符。(主要数据库的名字最后会变成文件名,所以这也是限制一些字符的原因)

还有一些就是系统保留了的名字,比如admin(一些特定的数据命令只能在这个库,这个库也是root数据库),local(这个主要是关于复制和本地数据库),config(主要用于保存分片信息)。

这里有个概念叫命名空间,当然和C++在意义上也差不多,把数据库的名字放到集合的前面得到的就是命名空间,也称为集合的完全限定名。命名空间的长度不得超过121,一般100就可以了,这个是MongoDB的权威指南说的哦!

默认链接test数据库,并将这个数据库连接复制给全局变量db,所以查看当前数据库用

1 > db

查看所有数据库名称用

1 > show dbs

选择其他数据库用

1 > use databaseName

1.5  安装,启动MongoDB,运行shell

 

安装得看你在什么平台上安装,CC是在CentOS下面装的,具体的安装文件就去官方网站看就行了,安装方法就不过多介绍了。

启动MongoDB以Linux为例,(一般都是开机自启动的,毕竟是服务程序嘛),运行./mongod就行了,不过你得指定一些参数,比如数据库目录,权限,主从服务器什么的,具体的可以带上参数 –help 来查看。

启动了服务之后,我们就可以真正的进入Shell来开始我们的工作了。

CC注:进入shell后,可以用help来查看一些命令,如果记不住命令的全称,按下Tab来自动补全是一个不错的选择。

1.6 MongoDB中的基础数据类型

本章最后说一说一些数据类型。(在以后的编辑中可能回来补充)

数字和字符串这些都是常用的,对象id类似于主键,然后比较hot的就是数组和内嵌文档。

1.6.1 null

 

这个很神奇的东西,在不同的数据库里面处理方式也不是一样,在后面遇上的时候会有具体介绍(目前CC知道的就是在查询或者修改时候的限定条件时候要注意)。

1 {“name”:null}

1.6.2 布尔

就是true和false了,(貌似在以前版本的时候只有1和0,不过现在都可以,这个注意一下比较好)

1 {“yes”:true}

1.6.3 数字

数字有三种:

32位整数、64位整数这两种说有,不过不支持(JS只支持64位浮点数)

64位浮点数,不论你的文档是下面的哪一种,

1 {“number”:22.13}
2 {“number”:213}

本质上都是一种类型:64位浮点数

1.6.4 字符串

就是UTF-8字符串类型的数据啦

1 {“name”:”CC”}

1.6.5 符号

又是一个不支持的,会自动转换成字符串。(这个用来干嘛CC也不知道。难道是+-/*?)

1.6.6 对象id

 

初次接触MongoDB可能对这个感到奇怪,不过看多了你就知道,这个键值在每一个文档中都会存在,并且值都是唯一存在的。所以,简单的来说,这个就是集合里面每个文档的唯一标识。其使用12字节的存储空间,每个字节两位十六进制数字,是一个24位的字符串(其实可以自己设定其值,但是这样就不能保证唯一性了,所以,一般都是由系统自动增长)12个字节分别由第 0-3 位时间戳,第4-6位机器码,第7-8PID和第9-11位计数器组成,每一秒能生成16777216个不同的Objectid。(感觉很厉害的样子)

1.6.7 日期

从纪元开始的毫秒数,一边调用new Date()后返回一个日期的字符串。

1 {“time”:new Date()}

1.6.8 正则表达式

文档里面可以包含正则表达式,这个就不多解释了。

1 {“testregex”:/erbida/i}

1.6.9 代码

文档中可以包含JS代码,代码对我们来说就是神器了,你懂的。

1.6.10 二进制数据

又是一个不能用的,由字节串组成。

1.6.11 最大值和最小值

不能用(CC不知道这个最大值最小值是什么意思,这个需要类型么?虽然在后面的$修改器里面有$max和$min,不过应该不是同一类吧)

1.6.12 未定义

这个就是传说中的undefined,他和null在JS中是有区别的

1 {“canon”:undefined}

1.6.13数组

数组很好玩,可以做列表,队列和栈的一些操作,所以每次操作的时候得小心。数组可以包含一组值,类型可以不同,具体的先关操作在$修改器那会讲哟。

1 {“test”:[“a”,”cc”,2]}

1.6.14 内嵌文档

内嵌文档我们也叫做子文档,相信熟悉JSON的童鞋一定不会陌生,例如

1 {“name”:
2  {
3       “first”:”Miku”,
4       “last”:”Hatsune”
5  }
6 }

这个类型是非常常用的哦!

----------------------------------华丽的分割线-----------------------------------------

这一章主要是介绍理论知识,代码不多(CC苦逼的因为雾大堵在高速公路上写的,写完了,刚好通车了)。有很多的不足还请各位大神指教,也请正在学习的童鞋共同讨论下呗。

回到家重新编辑了一下,在Word里面弄了下格式。

编程神马的,要有爱才行!

最后编辑日期:2013年1月11日晚

原文地址:https://www.cnblogs.com/CBDoctor/p/2932991.html