一、说明
1、该系列MongoDB学习笔记的学习环境采用的MongoDB版本为mongodb-win32-i386-2.4.6,操作系统为win7。
二、安装
1、新建两个目录,分别是D:\Installations\MongoDB-2.4.6\MongoDB和D:\Installations\MongoDB-2.4.6\MongoDBDATA(利用mongod启动服务,需要指定一个数据目录用于存放数据库数据文件,Windows下默认是C:\data\db)。
2、将下载的MongoDB压缩包解压,并拷贝里面的文件至D:\Installations\MongoDB-2.4.6\MongoDB目录下,目录结构如下:
3、将bin目录配置到系统环境变量。
4、安装MongoDB数据库并启动数据库服务:如下图这样就安装了MongoDB数据库并启动服务了(通过--dbpath显示指定了数据目录),以后要启动该数据库,使用同样的命令即可。可以发现启动数据库服务后,默认情况下MongoDB监听了27017端口,且会自动启动一个http服务,监听端口为28017,在浏览器中输入http://localhost:28017就能登录web界面。
5、MongoDB还提供了以服务的形式进行数据库启动,如下:需要通过--logpath指定一个日志文件的路径
三、MongoDB与传统的关系型数据库
1、文档
它是MongoDB中数据的基本单元,类似于关系型数据库的行,多个键值对有序地放置在一起便是文档。MongoDB中对文档的区分包括:键值对的顺序,键和值的类型,键和值的大小写。在两个文档中如果这三者有任何一个不一致,这两个文档就不相同。文档中键值对的“值”的数据类型甚至还可以是整个嵌入的文档。“键”则只能是字符串,命名规则为:
4、MongoDB中一个集合的每一个文档中的key的个数、名称以及类型可以是不一样的。
四、MongoDB数据类型
JSON在数据类型方面,只支持:null,布尔,数字,字符串,数组和对象。且JSON本身不直接支持日期类型,对于数字,也没法区分整数和浮点数,更不能区分32位数字和64位数字。MongoDB采用BSON数据格式进行数据的传输与存储,它是JSON的扩展,新增了诸如日期、浮点数等JSON不支持的数据类型。如下:
五、MongoDB Shell命令行与基本使用
1、MongoDB自带一个JavaScript Shell,它是一个JavaScript解释器,还是一个MongoDB的客户端,可以通过JavaScript与启动的数据库实例进行交互(Shell中命令区分大小写)。在Shell中,每当写完一句完整的JS代码,Shell就会将其结果返回。
2、启动数据库服务后就可以登录shell命令行:如下图,默认是登录test数据库的,如果要登录admin数据库,可以使用该命令:mongo 127.0.0.1:27017/admin。也可以只使用命令mongo,则连接的是本地数据库服务器的test数据库。连接后,会将这个数据库连接赋值给全局变量db。
3、查看所有的数据库:show dbs。
4、创建一个数据库与数据库之间的切换:use 数据库名,使用该命令可以在不同的数据库之间进行切换(切换全局变量db当前指向的数据库);当要切换的数据库不存在时,会创建该名称的数据库,但是这个数据库并没有真正的被创建,它只是在MongoDB缓存中,也就是在预处理缓冲池中有该数据库,如果什么也不干就离开的话,该数据库会被MongoDB自动删除;当为该数据库加入集合后才会真正地被创建。
5、查看某个数据库中所有的集合:show collections。如果该数据库中有已经存在的集合,并该集合中插入了文档,那么使用该命令查看集合时会发现多了一个system.indexes的集合,它负责存储索引,这是因为在插入一个文档时,如果没有一个叫做“_id”的key,那么会自动加入一个“_id”的key,系统默认会为该key建立唯一索引,所以在增加一个system.indexes的集合。
6、删除数据库中指定的集合:db.集合名.drop()。这里的db就是表示当前进入到的数据库,使用.集合名的方式就能够获得数据库中的某个集合,还可以使用db["集合名"]的方式来获取某个集合,特别是集合名含有某些特殊字符时,使用"."的方式很可能获取不到,此时使用[]的方式就特别有效;除了这两种方式获取一个集合外,还可以使用函数getCollection,如db.getCollection("集合名").drop()。且集合在第一次使用时会被创建。
7、删除当前数据库:db.dropDatabase()。
8、shell中的help函数:当进入到某个数据库中,要如何知道可以使用哪些操作呢?此时就可以使用help函数,如下图,就能够列出数据库级别有哪些用法了,当然除了数据库级别的help,还有集合级别的help,使用方法为:db.集合名.help()。在函数名称后面不添加“()”还可以查看函数的源码。
8、Shell内置的JS引擎可以直接执行执行JS代码,如下
如果启动Shell仅是想实验一下JavaScript,则运行mongo --nodb得到的Shell没有连接任何数据库。
9、虽然Shell中提供的全局变量db指向当前连接的数据库,但还可以用其它的变量来保存其它连接的数据库,利用Shell中提供的connect()命令即可,如下图: