标题：MongoDB管理与开发精要
基本信息
  作　　者：红丸著
出 版 社：机械工业出版社
出版时间：2012-1-1
版　　次：1
印刷时间：2012-1-1
纸　　张：胶版纸
印　　次：1
I S B N：9787111364795
包　　装：平装
图书摘要
全书共分为六个部分：基础篇首先介绍了MongoDB的功能特点和实用场合，然后讲解了MongoDB的基本使用和操作；高级篇详细讲解了MongoDB的高级查询、高级更新和高级特性；管理篇讲解了各种常用的管理工具、管理命令和访问控制；性能篇讲解了索引优化和性能监控；架构篇讲解了Replica Sets复制集、Sharding分片以及二者的结合；开发篇讲解了MongoDB的C#开发接口和Java开发接口。
图书特色
最初，本书的部分初稿在几大IT技术社区“疯传”，被社区网友视为学习MongoDB的“宝典”。由于受到社区网友的热捧，在初稿的基础上，作者对本书内容进行了系统化的补充，使原有的内容获得了大大的完善。本书的第一大特点是实用性和可操作性强，作者是国内MongoDB领域的先驱和实践者，本书的所有内容都来自于作者的实践；本书的第二大特点是内容深入且全面，从MongoDB的使用、管理、维护、性能优化，到MongoDB的开发和实现原理，几乎涵盖了读者需要掌握的所有内容。强烈推荐！
—— 51CTO

作者简介
“红丸”，资深数据库专家，国内MongoDB领域的先驱之一，积累了丰富的实战经验。精通MySQL、SQL Server和DB2等大中型数据库的运维和管理，还擅长Java和C#等技术。此外，他对Redis和分布式计算技术也有一定的研究。活跃于ITPUB等技术社区，发表和分享了大量关于MongoDB和Redis的技术文章，深受社区欢迎。
前言
为什么要写这本书
2005年我开始从事J2EE（现在叫Java EE）开发，一年以后正式将精力放在数据库领域，并于当年正式成为DBA（数据库管理员），此后一直从事数据库的管理工作。从DB2 V8到DB2 V9，从SQL Server 2000到SQL Server 2008，从MySQL到MongoDB，6年的时间奋斗在DBA这个领域，至今我依然深爱着这个职业。在以往的日子里，每当遇到疑难问题时，我总是非常耐心地去处理，并享受着解决问题带来的喜悦。
2010年，随着Web 2.0网站的大批涌现，NoSQL数据库逐渐流行起来。与传统的关系型数据库相比，NoSQL数据库具有操作简单、完全免费、源码公开、随时下载等特点，并可以用于各种商业目的。这使NoSQL数据库产品广泛应用于各种大型门户网站和专业网站，大大降低了企业运营成本。同时，NoSQL数据库对传统的关系型数据库造成了一定的冲击，例如，开源数据库代表MySQL已经将Memcached产品嵌入其解决方案中，与此同时，各种商业数据库也在不断推出列式数据处理方案来弥补自身的不足。由此可见，NoSQL的良好发展态势已经是不可逆转的了，它必将主宰未来的互联网数据库市场。MongoDB正是这些NoSQL产品中的杰出代表。
在这种背景下，2010年，机械工业出版社华章公司的杨福川准备筹划一本关于MongoDB实战方面的书，我正好乐意与大家一起分享我多年工作实践的积累以及数据库开发、优化、管理和维护经验，于是我们一拍即合。
此后，我开始蛰伏在北京的某个角落，从日出东方到夕阳西下，经历了不知多少个日日夜夜。看过漫天尘土的春季，浸泡在炎热的夏季，走过落叶纷飞的秋季，不知不觉进入了冬季。漫漫长路，本书终于尘埃落定。
本书全面介绍了MongoDB数据库，重在实战演练，学习思路也是我亲身的学习经历。出于严谨的考虑，本书中的例子都在测试环境上调试通过。这耗费了我大量的时间和精力，但是，如果能够帮助读者以最快的速度掌握一门技术，一切努力都是值得的。
读者对象
全书内容循序渐进、由浅入深，既可以引导初学者入门，又可以帮助具备一定基础的IT技术从业人员进一步提高技术水平，力求不同层次的读者都能从本书中受益。本书的读者对象包括：
q 准备扩展MongoDB知识的开发人员
q 有兴趣了解MongoDB的DBA或数据库应用程序编程人员
q 正在学习数据库课程的计算机相关专业的学生
q 想使用MongoDB实现快速查询的技术人员
q 想进一步了解MongoDB的“发烧友”
q 数据库管理层和技术决策者
本书特点
本书针对IT技术人员在工作中的必备知识与技能，精心安排了篇章结构。本书从基础入手，通过细致入微的内容组织，配以深入浅出的文字论述，以实际项目应用为背景，力图让读者从多个角度对MongoDB有深入的认识和理解。
本书最大的特点是实战性强，利用丰富的实例对MongoDB进行了详细的介绍。
本书系统全面，涵盖了MongoDB开发、优化、管理和维护的方方面面。从写作风格上看，本书没有过多讨论抽象的理论，而是通过丰富的实例来帮助读者理解应用MongoDB数据库时会遇到的各种问题及其解决方法，使读者能够很轻松地部署测试环境，并且熟练地掌握MongoDB数据库的各种使用技巧。
如何阅读本书
本书主要以引导读者思考、体会和实践为目的，通过实例让读者以最快的速度全面接触MongoDB。在阅读本书的时候，最好有一个可以实践的MongoDB测试环境，通过自己动手实践来加深认识、真正理解。对于管理层和技术决策者来说，可能没有太多时间进行大量的测试和实践，学习解决问题的思路就可以了。
本书分为6个部分，共15章：
第一部分　基础篇（第1章~第2章）：主要讲解MongoDB的基础理论和基本操作。通过这部分内容的学习，读者可以对MongoDB进行简单操作。
第二部分　高级篇（第3章~第5章）：主要讲解MongoDB的高级技术，例如高级查询、高级更新、高级功能的应用。通过这部分内容的学习，读者可以熟练地应用MongoDB来完成日常的业务需求。
第三部分　管理篇（第6章~第8章）：主要讲解MongoDB常用的运行和维护管理工具，例如数据的导入导出、数据的备份和恢复、数据的克隆和复制，以及与安全相关的实用技术。通过这部分内容的学习，读者应该具备一个MongoDB DBA所具有的全部技能。
第四部分　性能篇（第9章~第10章）：主要讲解MongoDB的索引、优化、性能监控技术。通过这部分内容的学习，读者可以具备MongoDB调优的能力。
第五部分　架构篇（第11章~第13章）：主要讲解MongoDB的高可用架构的细节，如主从复制、Sharding（分片）等。通过这部分内容的学习，读者可以独立设计MongoDB应用系统架构。
第六部分　开发篇（第14章~第15章）：主要讲解如何用C#和Java来操作MongoDB数据库。通过这部分内容的学习，读者可以将C#或Java开发技术与MongoDB数据库结合起来，完成特定应用系统的开发。
勘误和支持
由于作者的水平有限，编写时间仓促，书中难免会出现一些错误或者不准确的地方，恳请读者批评指正。读者可以将书中的错误或者学习本书时遇到的问题发送到ChinaDBA（中国DBA超级论坛），我将尽量提供最满意的解答，期待得到你们的真挚反馈。
目录
前言
第一部分　 基　 础　 篇
第1章　 认识MongoDB / 2
1.1　 NoSQL简介 / 2
1.1.1　 产生背景 / 2
1.1.2　 NoSQL的种类及其特性 / 4
1.1.3　 NoSQL特点 / 8
1.1.4　 发展现状 / 8
1.2　 初识MongoDB / 9
1.2.1　 特点及功能 / 10
1.2.2　 适用场合 / 11
1.3　 MongoDB实际应用案例 / 12
1.3.1　 国内案例 / 12
1.3.2　 国外案例 / 12
1.4　 本章小结 / 13
第2章　 快速入门 / 14
2.1　 体系结构 / 14
2.1.1　 数据逻辑结构 / 14
2.1.2　 数据存储结构 / 15
2.1.3　 日志系统 / 17
2.1.4　 元数据的存储 / 18
2.1.5　 数据类型 / 19
2.2　 MongoDB的安装和配置 / 22
2.2.1　 在Windows平台下的安装和配置 / 22
2.2.2　 在Linux平台下的安装和配置 / 23
2.3　 启动数据库 / 25
2.3.1　 命令行方式 / 25
2.3.2　 配置文件方式 / 25
2.3.3　 Daemon方式 / 26
2.3.4　 mongod参数方式 / 26
2.4　 停止数据库 / 27
2.4.1　 Ctrl+C组合键 / 27
2.4.2　 shutdownServer()指令 / 28
2.4.3　 UNIX系统指令 / 28
2.5　 操作数据库 / 29
2.5.1　 连接数据库 / 29
2.5.2　 插入记录 / 29
2.5.3　 查询记录 / 31
2.5.4　 修改记录 / 34
2.5.5　 删除记录 / 34
2.6　 常用GUI管理工具 / 34
2.6.1　 MongoVUE / 34
2.6.2　 RockMongo / 35
2.6.3　 MongoHub / 36
2.7　 本章小结 / 37
第二部分　 高　 级　 篇
第3章　 高级查询 / 40
3.1　 查询操作符 / 40
3.2　 查询语法 / 46
3.2.1　 数组内容的查询 / 47
3.2.2　 内嵌文档的查询 / 47
3.2.3　 正则表达式匹配 / 48
3.2.4　 $where查询 / 48
3.3　 联合查询 / 49
3.3.1　 简单手工关联 / 49
3.3.2　 DBRef方式关联 / 50
3.4　 游标和存储过程 / 51
3.4.1　 游标 / 51
3.4.2　 存储过程 / 52
3.5　 本章小结 / 53
第4章　 高级更新 / 55
4.1　 数据更新命令详解 / 55
4.1.1　 update命令 / 55
4.1.2　 save命令 / 56
4.2　 数据更新操作符 / 57
4.3　 本章小结 / 62
第5章　 高级特性 / 63
5.1　 Capped Collection集合 / 63
5.1.1　 创建Capped Collection / 63
5.1.2　 Capped Collection的用途 / 64
5.1.3　 注意事项 / 64
5.2　 GridFS规范 / 65
5.2.1　 如何实现海量存储 / 65
5.2.2　 命令行工具 / 66
5.3　 MapReduce编程模型 / 68
5.3.1　 Map进行分组 / 69
5.3.2　 Reduce聚合计算 / 69
5.3.3　 Result获取结果 / 70
5.3.4　 Finalize格式化输出 / 70
5.3.5　 Options定制输出 / 71
5.4　 本章小结 / 72
第三部分　 管　 理　 篇
第6章　 管理工具集 / 74
6.1　 数据迁移 / 74
6.1.1　 导出工具mongoexport / 75
6.1.2　 导出工具mongodump / 78
6.1.3　 导入工具mongoimport / 79
6.2　 数据的备份和恢复 / 81
6.2.1　 备份工具mongodump / 81
6.2.2　 恢复工具mongorestore / 84
6.3　 命令行操作 / 86
6.3.1　 通过eval参数执行指定语句 / 86
6.3.2　 执行指定文件中的内容 / 87
6.4　 本章小结 / 88
第7章　 管理命令 / 89
7.1　 克隆collection / 90
7.1.1　 远程克隆collection / 90
7.1.2　 本地克隆collection / 94
7.2　 复制数据库 / 94
7.2.1　 远程复制数据库 / 94
7.2.2　 本地复制数据库 / 96
7.3　 刷新磁盘 / 97
7.4　 捕获异常 / 98
7.4.1　 返回异常信息 / 98
7.4.2　 阻塞客户端 / 99
7.5　 进程控制 / 99
7.5.1　 查看活动进程 / 99
7.5.2　 结束进程 / 100
7.6　 验证collection的有效性 / 100
7.7　 数据压缩 / 101
7.8　 本章小结 / 102
第8章　 访问控制 / 103
8.1　 限制特定IP地址访问 / 104
8.2　 设置监听端口 / 104
8.3　 使用用户名和口令登录 / 105
8.3.1　 建立系统root用户 / 107
8.3.2　 建立指定权限用户 / 108
8.3.3　 删除指定用户 / 109
8.4　 本章小结 / 110
第四部分　 性　 能　 篇
第9章　 索引及优化 / 112
9.1　 MongoDB索引概述 / 112
9.2　 索引操作 / 113
9.2.1　 基础索引 / 113
9.2.2　 静默方式创建索引 / 115
9.2.3　 文档索引 / 115
9.2.4　 组合索引 / 116
9.2.5　 唯一索引 / 116
9.2.6　 强制使用索引 / 117
9.2.7　 删除索引 / 119
9.2.8 　 重建索引 / 119
9.2.9　 explain查看执行计划 / 119
9.3　 优化器Profiler / 121
9.3.1　 开启Profiler功能 / 121
9.3.2　 查询Profiler记录 / 122
9.4　 性能优化概述 / 123
9.4.1　 性能优化的原则 / 123
9.4.2　 影响性能的因素 / 124
9.5　 常用的优化方案 / 124
9.5.1　 创建索引 / 124
9.5.2　 限定返回结果条数 / 125
9.5.3　 只查询用到的字段 / 125
9.5.4　 采用Capped Collection / 126
9.5.5　 采用Server Side Code Execution命令集 / 126
9.5.6　 使用hint / 127
9.5.7　 采用Profiler / 127
9.6　 本章小结 / 128
第10章　 性能监控 / 129
10.1　 mongosniff工具 / 129
10.2　 mongostat工具 / 131
10.3　 db.serverStatus命令 / 132
10.4　 db.stats命令 / 134
10.5　 HTTP监控接口 / 135
10.6　 本章小结 / 136
第五部分　 架　 构　 篇
第11章　 复制集 / 138
11.1　 Replica Sets架构 / 138
11.2　 部署Replica Sets / 139
11.3　 主从操作日志 / 144
11.4　 主从配置信息 / 146
11.5　 管理Replica Sets / 147
11.5.1　 主从切换 / 147
11.5.2　 读写分离 / 149
11.5.3　 故障转移 / 151
11.5.4　 增减节点 / 153
11.6　 本章小结 / 160
第12章　 分片 / 161
12.1　 Sharding简介 / 161
12.1.1　 Sharding的特点 / 161
12.1.2　 Sharding架构 / 162
12.2　 构建一个简单的Sharding Cluster / 163
12.2.1　 启动Shard Server / 163
12.2.2　 启动Config Server / 164
12.2.3　 启动Route Process / 164
12.2.4　 配置Sharding / 164
12.2.5　 验证Sharding / 165
12.3　 维护Sharding / 167
12.3.1　 列出所有的Shard Server / 168
12.3.2　 查看Sharding信息 / 168
12.3.3　 判断是否是Sharding / 169
12.3.4　 对现有的表执行Sharding / 169
12.3.5　 新增Shard Server / 171
12.3.6　 移除Shard Server / 172
12.4　 本章小结 / 175
第13章　 Replica Sets + Sharding方案 / 176
13.1　 Replica Sets+Sharding架构 / 176
13.2　 搭建一个高可用架构 / 177
13.2.1　 创建数据目录 / 177
13.2.2　 配置Replica Sets / 178
13.2.3　 配置3台Config Server / 181
13.2.4　 配置3台Route Process / 181
13.2.5　 配置Shard Cluster / 181
13.2.6　 验证Sharding / 182
13.3　 本章小结 / 183
第六部分　 开　 发　 篇
第14章　 C#开发接口 / 186
14.1　 C#快速入门 / 186
14.1.1　 下载驱动和开发环境 / 186
14.1.2　 访问控制 / 188
14.1.3　 C#对数据库的基础操作 / 189
14.2　 C#驱动一致性 / 194
14.3　 C#常用操作 / 195
14.3.1　 对MongoDB实例的操作 / 195
14.3.2　 对用户的操作 / 198
14.3.3　 对collection的操作 / 202
14.3.4　 对索引的操作 / 208
14.4　 C#高级查询 / 211
14.4.1　 判断列名是否存在 / 211
14.4.2　 比较运算符 / 213
14.4.3　 逻辑运算符 / 221
14.4.4　 正则表达式查询 / 223
14.4.5　 跳过查询 / 224
14.5　 用C#操作GridFS / 225
14.5.1　 插入数据 / 225
14.5.2　 查询数据 / 226
14.5.3　 读取并保存数据 / 227
14.5.4　 删除数据 / 228
14.6　 本章小结 / 229
第15章　 Java开发接口 / 230
15.1　 Java快速入门 / 230
15.1.1　 下载驱动和开发环境 / 230
15.1.2　 访问控制 / 232
15.1.3　 Java对数据库的基础操作 / 233
15.2　 Java驱动一致性 / 237
15.3　 Java常用操作 / 238
15.3.1　 对MongoDB实例的操作 / 238
15.3.2　 对用户的操作 / 241
15.3.3　 对collection的操作 / 243
15.3.4　 对索引的操作 / 250
15.4　 Java高级查询 / 253
15.4.1　 通过游标获取所有document / 253
15.4.2　 比较运算符 / 254
15.4.3　 逻辑运算符 / 263
15.4.4　 正则表达式查询 / 264
15.4.5　 跳过查询 / 265
15.5　 用Java操作GridFS / 266
15.5.1　 插入数据 / 266
15.5.2　 查询数据 / 267
15.5.3　 读取并保存数据 / 268
15.5.4　 删除数据 / 269
15.6　 本章小结 / 270