1. Windows平台下的MongoDB的安装与运行
从MongoDB的官网上下载好.zip的压缩包,有32位和64位的,根据自己的需要进行选择。将下载好的压缩包解压到指定的目录下,然后在该目录所在路径的根目录下创建MongoDB所用的数据目录,例如你的MongoDB解压到了D盘,那么你需要创建D:\data\db作为数据目录,这样创建的数据目录是MongoDB默认使用的。
当然也可以在系统其他的任何位置创建数据目录,但在启动MongoDB时就需要指定数据目录路径。打开cmd命令行窗口,输入相应的命令,即可运行MongoDB服务。
假如我把MongoDB目录解压到了D盘,运行MongoDB的命令如下:
1 D:\mongodb-win32-x86_64-2.2.2\bin>mongod.exe
如果你没有使用MongoDB默认使用的数据目录,那么运行MongoDB的命令如下:
1 D:\mongodb-win32-x86_64-2.2.2\bin>mongod.exe --dbpath C:\Documents and Settings\Username\My Documents\db
在Windows平台下,MongoDB可以作为服务进行安装。所需命令如下:
1 D:\mongodb-win32-x86_64-2.2.2\bin>mongod.exe --logpath D:\mongoDB_log\mongodb.log --serviceName MongoDB –install
注意:--install这个命令必须和—logpath一起使用。Win7环境下需要以管理员的身份运行cmd命令行,才能安装服务成功。
MongoDB作为服务安装成功后,就可以在控制面板中启动或停止服务了。
2. MongoDB的快速理解
MongoDB与传统的关系型数据库相比,展现形式不同,特性也不一样,但对基本概念的理解是相通的。
① 文档
文档是MongoDB中数据的基本单元。类似于关系数据库管理系统中的行,即记录。(但是比行要复杂得多)。
文档的表现形式:{“greeting” : “Hello, World”},当然文档中也可以包含多个键/值对。
文档的键是字符串,键名需要是UTF-8字符串。
注意:文档中的键/值对是有序的,如果两个文档所含有的键/值对相同,但顺序不同的话,那么这两个文档是不相同的。文档中的键/值对区分大小写和类型。例如{“foo” : 3}和{“foo” : “3”}是不同的,{“foo” : “3”}和{“Foo” : “3”}也是不同的。
② 集合
集合是一组文档,如同无模式的表。无模式就是指一个集合里面的文档可以是各式各样的。例如一个集合里包含的文档可以如下所示:
1 {“greeting” : “Hello, World”} 2 {“foo” : 5}
集合名需要是UTF-8字符串。
③ 子集合
组织集合的一种惯例是使用“.”字符分开的按命名空间划分的子集合。例如,一个带有博客功能的应用可能包含两个集合,分别是blog.posts和blog.authors。这样做的目的是为了使组织结构更好些,也就是说blog这个集合(这里根本就不需要存在)及其子集合没有任何关系。
④ 数据库
多个集合可以组成数据库,一个MongoDB实例可以承载多个数据库,它们之间可视为完全独立的,不同的数据库也放置在不同的文件。
数据库名需要是UTF-8字符串,最多64字节。
把数据库的名字放到集合前面,得到就是集合的完全限定名,称之为命名空间。例如,如果你在cms数据库中使用blog.posts集合,那么这个集合的命名空间cms.blog.posts。命名空间的长度不得超过121字节,在实际使用中应该小于100字节。
3. MongoDB的管理信息和客户端
默认情况下,MongoDB监听27017端口。MongoDB还会启动一个非常基本的HTTP服务器,端口号是28017,可以通过浏览器访问http://localhost:28017来获取数据库的管理信息。
MongoDB客户端:MongoDB shell。
启动shell的命令:D:\mongodb-win32-x86_64-2.2.2\bin>mongo.exe
shell的特点:功能完备的javascript shell,可以运行任何javascript程序,可以充分利用javascript的标准库,还可以定义和调用javascript函数。
开启shell的时候会连到MongoDB服务器的test数据库,并将这个数据库连接赋值给全局变量db。这个变量是通过shell访问MongoDB的主要入口点。假如想要shell启动时连接到users数据库,命令如下:
1 D:\mongodb-win32-x86_64-2.2.2\bin>mongo.exe users
4. MongoDB基本的CRUD操作
在blog集合里面创建一条文档:
1 >db.blog.insert({“title” : “My Blog Post”, “content” : “Here’s my blog post”})
查看blog集合中的一个文档(多个文档时选第一个):
1 >db.blog.findOne()
查看blog集合中的所有文档:
1 >db.blog.find()
find()和findOne()可以接受查询文档形式的限定条件。例如查看title为“My Blog Post”的blog文档,命令如下:
1 >db.blog.find({“title” : “My Blog Post”});
更改一个文档:
1 >post = {“title” : “My Blog Post”, “content” : “Here’s my blog post”, “date” : new Date()} 2 …… 3 >db.blog.update({“title” : “My Blog Post”}, post)
删除一个文档:
1 >db.blog.remove({“title” : “My Blog Post”})
若集合名与数据库类的属性同名时,可以使用getCollection函数,例如:
1 >db.getCollection(“version”);
5. MongoDB的基本数据类型
① null:
1 {“x” : null}
② 布尔:
1 {“x” : true}
③ 32位整数:
Shell中不支持,由于JavaScript仅支持64位浮点数,所以32位整数会被自动转换。
④ 64位整数:
Shell也不支持这个类型。shell会使用一个特殊的内嵌文档来显示64位整数。
⑤ 64位浮点数:
Shell中的数字都是这种类型。例如:
1 {“x” : 3.14} 2 {“x” : 3}
⑥ 字符串:
UTF-8字符串都可以表示为字符串类型的数据:
1 {“x” : “foobar”}
⑦ 符号:
Shell不支持这种类型。Shell将数据库里的符号类型转换成字符串。
⑧ 对象id:
对象id是文档的12字节的唯一ID。
1 {“x” : ObjectId()}
⑨ 日期:
1 {“x” : new Date()}
⑩ 正则表达式:
文档中可以包含正则表达式,采用JavaScript的正则表达式语法:
1 {“x” : /foobar/i}
⑪ 代码:
文档中还可以包含JavaScript代码:
1 {“x” : function() { /*…*/ }}
⑫ 二进制数据:
二进制数据可以由任意字节的串组成。不过shell中无法使用。
⑬ 最大值和最小值
很抽象,待考证。
⑭ 未定义:
JavaScript中null和undefined是不同的类型。
1 {“x” : undefined}
⑮ 数组:
1 {“x” : [“a”, “b”, “c”]}
⑯ 内嵌文档:
1 {“x” : {“foo” : “bar”}}