第1章 NoSQL和MongoDB简介 1
1.1 NoSQL是什么 1
1.1.1 文档存储数据库 2
1.1.2 键/值数据库 2
1.1.3 列存储数据库 2
1.1.4 图存储数据库 2
1.2 选择RDBMS、NoSQL还是两者 3
1.3 理解MongoDB 3
1.3.1 理解集合 4
1.3.2 理解文档 4
1.4 MongoDB数据类型 5
1.5 规划数据模型 6
1.5.1 使用文档引用范式化数据 6
1.5.2 使用嵌入式文档对数据进行反范式化 7
1.5.3 使用固定集合 8
1.5.4 理解原子写入操作 9
1.5.5 考虑文档增大 9
1.5.6 找出可使用索引、分片和复制的情形 9
1.5.7 使用大型集合还是大量集合 10
1.5.8 确定数据的生命周期 10
1.5.9 考虑数据可用性和性能 10
1.6 小结 11
1.7 问与答 11
1.8 作业 11
1.8.1 小测验 11
1.8.2 小测验答案 12
1.8.3 练习 12
第2章 安装和配置MongoDB 13
2.1 搭建MongoDB环境 13
2.1.1 安装MongoDB 13
2.1.2 启动MongoDB 14
2.1.3 配置MongoDB 15
2.1.4 停止MongoDB 15
2.2 访问MongoDB HTTP接口 17
2.3 从MongoDB shell访问MongoDB 18
2.3.1 启动MongoDB shell 18
2.3.2 理解MongoDB shell命令 18
2.3.3 理解MongoDB shell原生方法和构造函数 19
2.3.4 理解命令参数和结果 20
2.4 MongoDB shell脚本编程 20
2.4.1 使用命令行选项-eval执行JavaScript表达式 20
2.4.2 在MongoDB shell中使用方法load()来执行脚本 21
2.4.3 在命令mongo中指定要执行的JavaScript文件 21
2.5 小结 23
2.6 问与答 23
2.7 作业 23
2.7.1 小测验 24
2.7.2 小测验答案 24
2.7.3 练习 24
第3章 在MongoDB shell中使用JavaScript 25
3.1 定义变量 25
3.2 理解JavaScript数据类型 26
3.3 在MongoDB shell脚本中输出数据 27
3.4 使用运算符 28
3.4.1 算术运算符 28
3.4.2 赋值运算符 28
3.4.3 比较运算符和条件语句 29
3.5 循环 31
3.5.1 while循环 31
3.5.2 do/while循环 31
3.5.3 for循环 32
3.5.4 for/in循环 32
3.5.5 中断循环 33
3.6 创建函数 35
3.6.1 定义函数 35
3.6.2 向函数传递变量 35
3.6.3 从函数返回值 36
3.6.4 使用匿名函数 36
3.7 理解变量作用域 38
3.8 使用JavaScript对象 38
3.8.1 使用对象语法 39
3.8.2 创建自定义对象 39
3.8.3 使用原型对象模式 40
3.9 操作字符串 41
3.9.1 合并字符串 42
3.9.2 在字符串中搜索子串 42
3.9.3 替换字符串中的单词 42
3.9.4 将字符串分割成数组 43
3.10 使用数组 44
3.10.1 合并数组 45
3.10.2 迭代数组 45
3.10.3 将数组转换为字符串 46
3.10.4 检查数组是否包含特定的元素 46
3.10.5 在数组中增删元素 46
3.11 添加错误处理 48
3.11.1 try/catch块 48
3.11.2 引发自定义错误 49
3.11.3 使用finally 49
3.12 小结 50
3.13 问与答 50
3.14 作业 50
3.14.1 小测验 50
3.14.2 小测验答案 51
3.14.3 练习 51
第4章 配置用户账户和访问控制 52
4.1 理解admin数据库 52
4.2 管理用户账户 53
4.2.1 创建用户账户 53
4.2.2 列出用户 56
4.2.3 删除用户 58
4.3 配置访问控制 60
4.3.1 创建用户管理员账户 60
4.3.2 启用身份验证 61
4.3.3 创建数据库管理员账户 61
4.4 小结 64
4.5 问与答 64
4.6 作业 64
4.6.1 小测验 64
4.6.2 小测验答案 65
4.6.3 练习 65
第5章 在MongoDB shell中管理数据库和集合 66
5.1 理解Database和Collection对象 66
5.1.1 理解Connection对象 66
5.1.2 理解Database对象 67
5.1.3 理解Collection对象 68
5.2 管理数据库 70
5.2.1 显示数据库列表 70
5.2.2 切换到其他数据库 70
5.2.3 创建数据库 70
5.2.4 删除数据库 71
5.3 管理集合 74
5.3.1 显示数据库的集合列表 74
5.3.2 创建集合 74
5.3.3 删除集合 76
5.4 实现示例数据集 77
5.5 小结 80
5.6 问与答 81
5.7 作业 81
5.7.1 小测验 81
5.7.2 小测验答案 81
5.7.3 练习 82
第6章 使用MongoDB shell在MongoDB集合中查找文档 83
6.1 理解Cursor对象 83
6.2 理解查询运算符 84
6.3 从集合中获取文档 86
6.4 查找特定的文档 90
6.4.1 根据特定的字段值查找文档 91
6.4.2 根据字段值数组查找文档 91
6.4.3 根据字段值的大小查找文档 91
6.4.4 根据数组字段的长度查找文档 91
6.4.5 根据子文档中的值查找文档 92
6.4.6 根据数组字段的内容查找文档 92
6.4.7 根据字段是否存在查找文档 92
6.4.8 根据子文档数组中的字段查找文档 92
6.5 小结 95
6.6 问与答 95
6.7 作业 95
6.7.1 小测验 95
6.7.2 小测验答案 95
6.7.3 练习 96
第7章 使用MongoDB shell执行其他数据查找操作 97
7.1 计算文档数 97
7.2 对结果集进行排序 99
7.3 限制结果集 101
7.3.1 限制结果集的大小 101
7.3.2 限制返回的字段 103
7.3.3 结果集分页 106
7.4 查找不同的字段值 109
7.5 小结 111
7.6 问与答 111
7.7 作业 111
7.7.1 小测验 111
7.7.2 小测验答案 112
7.7.3 练习 112
第8章 操作集合中的MongoDB文档 113
8.1 理解写入关注 113
8.2 配置数据库连接错误处理 114
8.3 获取数据库写入请求的状态 114
8.4 理解数据库更新运算符 116
8.5 使用MongoDB shell在集合中添加文档 117
8.6 使用MongoDB shell更新集合中的文档 119
8.7 使用MongoDB shell将文档保存到集合中 123
8.8 使用MongoDB shell在集合中更新或插入文档 125
8.9 使用MongoDB shell从集合中删除文档 128
8.10 小结 130
8.11 问与答 130
8.12 作业 130
8.12.1 小测验 131
8.12.2 小测验答案 131
8.12.3 练习 131
第9章 使用分组、聚合和映射-归并 132
9.1 在MongoDB shell中对查找操作的结果进行分组 132
9.2 从MongoDB shell发出请求时使用聚合来操作数据 136
9.2.1 理解方法aggregate() 136
9.2.2 使用聚合框架运算符 136
9.2.3 使用聚合表达式运算符 137
9.3 在MongoDB shell中使用映射-归并生成新的数据结果 140
9.4 小结 145
9.5 问与答 145
9.6 作业 145
9.6.1 小测验 145
9.6.2 小测验答案 145
9.6.3 练习 146
第10章 在Java应用程序中实现MongoDB 147
10.1 理解Java MongoDB驱动程序中的对象 147
10.1.1 理解Java对象MongoClient 148
10.1.2 理解Java对象DB 149
10.1.3 理解Java对象DBCollection 149
10.1.4 理解Java对象DBCursor 150
10.1.5 理解Java对象BasicDBObject和DBObject 151
10.2 使用Java查找文档 153
10.2.1 使用Java从MongoDB获取文档 154
10.2.2 使用Java在MongoDB数据库中查找特定的文档 157
10.3 使用Java计算文档数 160
10.4 使用Java对结果集排序 162
10.5 小结 165
10.6 问与答 165
10.7 作业 166
10.7.1 小测验 166
10.7.2 小测验答案 166
10.7.3 练习 166
第11章 在Java应用程序中访问MongoDB数据库 167
11.1 使用Java限制结果集 167
11.1.1 使用Java限制结果集的大小 167
11.1.2 使用Java限制返回的字段 170
11.1.3 使用Java将结果集分页 173
11.2 使用Java查找不同的字段值 176
11.3 在Java应用程序中对查找操作结果进行分组 178
11.4 从Java应用程序发出请求时使用聚合来操作数据 182
11.5 小结 185
11.6 问与答 185
11.7 作业 185
11.7.1 小测验 185
11.7.2 小测验答案 185
11.7.3 练习 186
第12章 在Java应用程序中操作MongoDB数据 187
12.1 使用Java添加文档 187
12.2 使用Java删除文档 191
12.3 使用Java保存文档 194
12.4 使用Java更新文档 197
12.5 使用Java更新或插入文档 200
12.6 小结 204
12.7 问与答 204
12.8 作业 204
12.8.1 小测验 204
12.8.2 小测验答案 204
12.8.3 练习 204
第13章 在PHP应用程序中实现MongoDB 205
13.1 理解PHP MongoDB驱动程序中的对象 205
13.1.1 理解PHP对象MongoClient 206
13.1.2 理解PHP对象MongoDB 206
13.1.3 理解PHP对象MongoCollection 207
13.1.4 理解PHP对象MongoCursor 208
13.1.5 理解表示参数和文档的PHP对象Array 209
13.1.6 设置写入关注和其他请求选项 209
13.2 使用PHP查找文档 211
13.2.1 使用PHP从MongoDB获取文档 211
13.2.2 使用PHP在MongoDB数据库中查找特定的文档 213
13.3 使用PHP计算文档数 216
13.4 使用PHP对结果集排序 218
13.5 小结 221
13.6 问与答 221
13.7 作业 221
13.7.1 小测验 221
13.7.2 小测验答案 221
13.7.3 练习 222
第14章 在PHP应用程序中访问MongoDB数据库 223
14.1 使用PHP限制结果集 223
14.1.1 使用PHP限制结果集的大小 223
14.1.2 使用PHP限制返回的字段 225
14.1.3 使用PHP将结果集分页 228
14.2 使用PHP查找不同的字段值 230
14.3 在PHP应用程序中对查找操作结果进行分组 232
14.4 从PHP应用程序发出请求时使用聚合来操作数据 235
14.5 小结 238
14.6 问与答 238
14.7 作业 239
14.7.1 小测验 239
14.7.2 小测验答案 239
14.7.3 练习 239
第15章 在PHP应用程序中操作MongoDB数据 240
15.1 使用PHP添加文档 240
15.2 使用PHP删除文档 244
15.3 使用PHP保存文档 246
15.4 使用PHP更新文档 248
15.5 使用PHP更新或插入文档 251
15.6 小结 254
15.7 问与答 254
15.8 作业 255
15.8.1 小测验 255
15.8.2 小测验答案 255
15.8.3 练习 255
第16章 在Python应用程序中实现MongoDB 256
16.1 理解Python MongoDB驱动程序中的对象 256
16.1.1 理解Python对象MongoClient 257
16.1.2 理解Python对象Database 257
16.1.3 理解Python对象Collection 258
16.1.4 理解Python对象Cursor 259
16.1.5 理解表示参数和文档的Python对象Dictionary 260
16.1.6 设置写入关注和其他请求选项 260
16.2 使用Python查找文档 262
16.2.1 使用Python从MongoDB获取文档 262
16.2.2 使用Python在MongoDB数据库中查找特定的文档 264
16.3 使用Python计算文档数 267
16.4 使用Python对结果集排序 268
16.5 小结 271
16.6 问与答 271
16.7 作业 271
16.7.1 小测验 271
16.7.2 小测验答案 272
16.7.3 练习 272
第17章 在Python应用程序中访问MongoDB数据库 273
17.1 使用Python限制结果集 273
17.1.1 使用Python限制结果集的大小 273
17.1.2 使用Python限制返回的字段 275
17.1.3 使用Python将结果集分页 278
17.2 使用Python查找不同的字段值 280
17.3 在Python应用程序中对查找操作结果进行分组 282
17.4 从Python应用程序发出请求时使用聚合来操作数据 285
17.5 小结 288
17.6 问与答 288
17.7 作业 288
17.7.1 小测验 288
17.7.2 小测验答案 288
17.7.3 练习 289
第18章 在Python应用程序中操作MongoDB数据 290
18.1 使用Python添加文档 290
18.2 使用Python删除文档 293
18.3 使用Python保存文档 296
18.4 使用Python更新文档 298
18.5 使用Python更新或插入文档 301
18.6 小结 304
18.7 问与答 304
18.8 作业 304
18.8.1 小测验 304
18.8.2 小测验答案 304
18.8.3 练习 305
第19章 在Node.js应用程序中实现MongoDB 306
19.1 理解Node.js MongoDB驱动程序中的对象 306
19.1.1 理解回调函数 307
19.1.2 理解Node.js对象MongoClient 307
19.1.3 理解Node.js对象Database 308
19.1.4 理解Node.js对象Collection 308
19.1.5 理解Node.js对象Cursor 310
19.1.6 理解用于表示参数和文档的Node.js JavaScript对象 310
19.1.7 设置写入关注和其他请求选项 311
19.2 使用Node.js查找文档 313
19.2.1 使用Node.js从MongoDB获取文档 313
19.2.2 使用Node.js在MongoDB数据库中查找特定的文档 316
19.3 使用Node.js计算文档数 319
19.4 使用Node.js对结果集排序 320
19.5 小结 323
19.6 问与答 323
19.7 作业 324
19.7.1 小测验 324
19.7.2 小测验答案 324
19.7.3 练习 324
第20章 在Node.js应用程序中访问MongoDB数据库 325
20.1 使用Node.js限制结果集 325
20.1.1 使用Node.js限制结果集的大小 325
20.1.2 使用Node.js限制返回的字段 328
20.1.3 使用Node.js将结果集分页 330
20.2 使用Node.js查找不同的字段值 333
20.3 在Node.js应用程序中对查找操作结果进行分组 335
20.4 从Node.js应用程序发出请求时使用聚合来操作数据 338
20.5 小结 341
20.6 问与答 341
20.7 作业 342
20.7.1 小测验 342
20.7.2 小测验答案 342
20.7.3 练习 342
第21章 在Node.js应用程序中操作MongoDB数据 343
21.1 使用Node.js添加文档 343
21.2 使用Nosd.js删除文档 348
21.3 使用Node.js保存文档 351
21.4 使用Node.js更新文档 354
21.5 使用Node.js更新或插入文档 357
21.6 小结 361
21.7 问与答 361
21.8 作业 361
21.8.1 小测验 361
21.8.2 小测验答案 361
21.8.3 练习 361
第22章 使用MongoDB shell管理数据库 362
22.1 管理数据库和集合 362
22.1.1 复制数据库 363
22.1.2 重命名集合 364
22.1.3 创建固定集合 365
22.2 管理索引 366
22.2.1 添加索引 366
22.2.2 删除索引 368
22.2.3 重建索引 368
22.3 理解性能和诊断任务 370
22.3.1 查看数据库和集合的统计信息 370
22.3.2 检查数据库 371
22.3.3 剖析MongoDB 372
22.3.4 评估查询 374
22.3.5 使用诊断命令top 377
22.4 修复MongoDB数据库 378
22.5 备份MongoDB数据库 379
22.6 小结 380
22.7 问与答 380
22.8 作业 381
22.8.1 小测验 381
22.8.2 小测验答案 381
22.8.3 练习 381
第23章 在MongoDB中实现复制和分片 382
23.1 在MongoDB中实现复制 382
23.1.1 理解复制策略 384
23.1.2 部署副本集 385
23.2 在MongoDB中实现分片 389
23.2.1 理解分片服务器的类型 390
23.2.2 选择片键 391
23.2.3 选择分区方法 392
23.2.4 部署MongoDB分片集群 393
23.3 小结 398
23.4 问与答 399
23.5 作业 399
23.5.1 小测验 399
23.5.2 小测验答案 399
23.5.3 练习 399
第24章 实现MongoDB GridFS存储 401
24.1 理解GridFS存储 401
24.2 从命令行实现GridFS 402
24.3 使用Java MongoDB驱动程序实现MongoDB GridFS 403
24.3.1 在Java中访问MongoDB GridFS 404
24.3.2 使用Java列出MongoDB GridFS中的文件 404
24.3.3 使用Java在MongoDB GridFS中添加文件 404
24.3.4 使用Java从MongoDB GridFS中获取文件 405
24.3.5 使用Java从MongoDB GridFS中删除文件 405
24.4 使用PHP MongoDB驱动程序实现MongoDB GridFS 408
24.4.1 在PHP中访问MongoDB GridFS 408
24.4.2 使用PHP列出MongoDB GridFS中的文件 408
24.4.3 使用PHP在MongoDB GridFS中添加文件 409
24.4.4 使用PHP从MongoDB GridFS中获取文件 409
24.4.5 使用PHP从MongoDB GridFS中删除文件 410
24.5 使用Python MongoDB驱动程序实现MongoDB GridFS 412
24.5.1 在Python中访问MongoDB GridFS 412
24.5.2 使用Python列出MongoDB GridFS中的文件 412
24.5.3 使用Python在MongoDB GridFS中添加文件 412
24.5.4 使用Python从MongoDB GridFS中获取文件 413
24.5.5 使用Python从MongoDB GridFS中删除文件 413
24.6 使用Node.js MongoDB驱动程序实现MongoDB GridFS 415
24.6.1 在Node.js中访问MongoDB GridFS 415
24.6.2 使用Node.js列出MongoDB GridFS中的文件 415
24.6.3 使用Node.js在MongoDB GridFS中添加文件 416
24.6.4 使用Node.js从MongoDB GridFS中获取文件 416
24.6.5 使用Node.js从MongoDB GridFS中删除文件 416
24.7 小结 419
24.8 问与答 419
24.9 作业 419
24.9.1 小测验 419
24.9.2 小测验答案 419
24.9.3 练习 420