第1章MongoDB簡介11.1了解MongoDB哲學1
1.1.1使用正確的工具處理正確的工作1
1.1.2天然缺少對事務的支持3
1.1.3JSON和MongoDB3
1.1.4采用非關系方式5
1.1.5選擇性能還是特性6
1.1.6在任何地方均可運行數據庫6
1.2將所有組合在一起7
1.2.1生成或創建鍵7
1.2.2使用鍵和值8
1.2.3實現集合8
1.2.4了解數據庫9
1.3了解特性列表9
1.3.1WiredTiger9
1.3.2使用面向文檔存儲(BSON)9
1.3.3支持動態查詢10
1.3.4為文檔創建索引11
1.3.5使用地理空間索引11
1.3.6分析查詢11
1.3.7就地更新信息(僅用于內存映射
的數據庫)12
1.3.8存儲二進制數據12
1.3.9復制數據12
1.3.10實施分片13
1.3.11使用map和reduce函數13
1.3.12聚集框架14
1.4獲取幫助14
1.4.1訪問網站14
1.4.2剪切和粘貼MongoDB代碼14
1.4.3在Google小組中尋找解決方案14
1.4.4在StackOverflow中尋找解
決方案14
1.4.5利用JIRA跟蹤系統15
1.4.6與MongoDB開發者溝通15
1.5小結15
第2章安裝MongoDB17
2.1選擇版本17
2.2在系統中安裝MongoDB18
2.2.1在Linux中安裝MongoDB18
2.2.2在Windows中安裝MongoDB19
2.3運行MongoDB20
2.3.1先決條件20
2.3.2研究安裝目錄布局20
2.3.3使用MongoDBshell21
2.4添加額外的驅動22
2.4.1安裝PHP驅動22
2.4.2確認PHP安裝正確25
2.4.3安裝Python驅動27
2.4.4確認PyMongo安裝正確28
2.5小結29
第3章數據模型31
3.1設計數據庫31
3.1.1集合的更多細節32
3.1.2使用文檔33
3.1.3在文檔中內嵌或引用信息34
3.1.4創建_id字段35
3.2構建索引36
3.3使用地理空間索引36
3.4可插拔的存儲引擎41
3.5在真實世界中使用MongoDB42
3.6小結42
第4章使用數據43
4.1瀏覽數據庫43
4.2在集合中插入數據44
4.3查詢數據45
4.3.1使用點號47
4.3.2使用函數sort、limit和skip48
4.3.3使用固定集合、自然順
序和$natural48
4.3.4獲取單個文檔50
4.3.5使用聚集命令50
4.3.6使用條件操作符52
4.3.7使用正則表達式59
4.4更新數據60
4.4.1使用update()更新60
4.4.2使用save()命令實現upsert60
4.4.3自動更新信息61
4.4.4從數組中刪除元素64
4.4.5指定匹配數組的位置65
4.4.6原子操作65
4.4.7以原子方式修改和返回文檔67
4.5批處理數據67
4.5.1執行批處理68
4.5.2評估輸出69
4.6重命名集合70
4.7刪除數據70
4.8引用數據庫71
4.8.1手動引用數據71
4.8.2使用DBRef引用數據72
4.9使用與索引相關的函數74
4.10小結77
第5章GridFS79
5.1背景79
5.2使用GridFS80
5.3開始使用命令行工具80
5.3.1使用_id鍵81
5.3.2使用文件名81
5.3.3文件的長度82
5.3.4使用塊大小82
5.3.5跟蹤上傳日期82
5.3.6生成文件的哈希值83
5.4查看MongoDB中的數據83
5.4.1使用搜索命令84
5.4.2刪除84
5.4.3從MongoDB中獲取文件85
5.4.4mongofiles命令小結85
5.5使用Python85
5.5.1連接數據庫86
5.5.2訪問單詞87
5.6在MongoDB中添加文件87
5.7從GridFS中讀取文件87
5.8刪除文件88
5.9小結88
第6章PHP和MongoDB89
6.1比較MongoDB和PHP中
的文檔89
6.2MongoDB類90
6.2.1連接和斷開連接91
6.2.2插入數據92
6.3查詢數據94
6.3.1返回單個文檔94
6.3.2列出所有文檔95
6.4使用查詢操作符96
6.4.1查詢特定信息96
6.4.2排序、限制和忽略數據項97
6.4.3統計匹配結果的數目98
6.4.4使用聚集框架對數組分組98
6.4.5使用hint()函數指定索引99
6.4.6使用條件操作符重新定義查詢100
6.4.7判斷某個字段是否有值105
6.4.8正則表達式106
6.5使用PHP修改數據106
6.5.1使用update()函數更新數據107
6.5.2節省更新操作的時間108
6.5.3使用save()函數更新數據114
6.5.4以原子方式修改文檔115
6.6批處理數據116
6.6.1執行批處理117
6.6.2評估輸出118
6.7刪除數據118
6.8DBRef120
6.9GridFS和PHP驅動122
6.9.1存儲文件122
6.9.2在已存儲的文件中添加
元數據123
6.9.3獲取文件123
6.9.4刪除數據124
6.10小結124
第7章Python和MongoDB125
7.1在Python中使用文檔125
7.2使用PyMongo模塊126
7.3連接和斷開126
7.4插入數據126
7.5搜索數據128
7.5.1搜索單個文檔128
7.5.2搜索多個文檔129
7.5.3使用點操作符129
7.5.4返回字段130
7.5.5使用sort()、limit()和skip()簡化
查詢130
7.5.6聚集查詢132
7.5.7使用hint()指定索引134
7.5.8使用條件操作符重定義查詢135
7.5.9使用正則表達式執行搜索140
7.6修改數據140
7.6.1更新數據141
7.6.2修改操作符141
7.6.3用replace_one()替代文檔145
7.6.4以原子方式修改文檔146
7.6.5使用參數146
7.7批處理數據147
7.8刪除數據148
7.9在兩個文檔之間創建鏈接149
7.10小結152
第8章高級查詢153
8.1文本搜索153
8.1.1文本搜索的代價和限制154
8.1.2使用文本搜索154
8.1.3其他語言中的文本索引158
8.1.4文本索引的復合索引159
8.2聚集框架160
8.2.1$group161
8.2.2$limit163
8.2.3$match164
8.2.4$sort165
8.2.5$unwind166
8.2.6$skip168
8.2.7$out169
8.2.8$lookup170
8.3MapReduce171
8.3.1MapReduce的工作方式171
8.3.2設置測試文檔172
8.3.3使用map函數172
8.3.4高級MapReduce174
8.3.5調試MapReduce176
8.4小結177
第9章數據庫管理179
9.1使用管理工具179
9.1.1mongo——MongoDB控制臺179
9.1.2使用第三方管理工具180
9.2備份MongoDB服務器180
9.2.1創建第一個備份180
9.2.2備份單個數據庫182
9.2.3備份單個集合182
9.3深入學習備份183
9.4恢復單個數據庫或集合183
9.4.1恢復單個數據庫184
9.4.2恢復單個集合184
9.5自動備份185
9.5.1使用本地數據存儲185
9.5.2使用遠端數據存儲(基于云)187
9.6備份大數據庫188
9.6.1使用隱藏的輔助服務器
備份數據188
9.6.2使用日志文件系統創建快照188
9.6.3使用卷管理器時的磁盤布局190
9.7將數據導入MongoDB191
9.8從MongoDB導出數據192
9.9通過限制對MongoDB服務器
的訪問保護數據安全193
9.10使用身份驗證保護服務器193
9.10.1添加admin用戶193
9.10.2啟用身份驗證194
9.10.3在mongo控制臺中執行
身份驗證194
9.10.4MongoDB用戶角色196
9.10.5修改用戶憑據197
9.10.6添加只讀用戶198
9.10.7刪除用戶198
9.10.8在PHP應用中進行連接
身份驗證198
9.11管理服務器199
9.11.1啟動服務器199
9.11.2獲得服務器版本201
9.11.3獲得服務器狀態201
9.11.4關閉服務器203
9.12使用MongoDB日志文件204
9.13驗證和修復數據204
9.13.1修復服務器205
9.13.2驗證單個集合205
9.13.3修復集合驗證錯誤206
9.13.4修復集合的數據文件207
9.13.5壓縮集合的數據文件207
9.14升級MongoDB208
9.15監控MongoDB208
9.16使用MongoDB云管理器209
9.17小結210
第10章優化211
10.1優化服務器硬件以提高性能211
10.2理解MongoDB的存儲引擎211
10.3了解MMAPv1中MongoDB
使用內存的方式212
10.4理解WiredTiger下MongoDB
的內存使用方式212
10.4.1WiredTiger中的壓縮213
10.4.2選擇正確的數據庫服務
器硬件213
10.5評估查詢性能214
10.5.1MongoDB分析器214
10.5.2使用explain()分析特定的
查詢217
10.5.3使用分析器和explain()優化
查詢219
10.6管理索引224
10.6.1顯示索引224
10.6.2創建簡單的索引225
10.6.3創建復合索引226
10.7JesseJiryuDavis的三步
混合索引226
10.7.1設置227
10.7.2范圍查詢227
10.7.3相等和范圍查詢228
10.7.4題外話:MongoDB選擇
索引的方式230
10.7.5相等、范圍查詢和排序231
10.7.6最后的方法233
10.8指定索引選項234
10.8.1使用{background:true}在
后臺創建索引234
10.8.2使用{unique:true}創建唯一
鍵索引234
10.8.3使用{sparse:true}創建
稀疏索引235
10.8.4創建部分索引235
10.8.5TTL索引235
10.8.6文本索引236
10.8.7刪除索引236
10.8.8重建集合索引237
10.9通過hint()強制使用特定
的索引237
10.10使用索引過濾器238
10.11優化小對象的存儲240
10.12小結241
第11章復制243
11.1MongoDB復制的目標243
11.1.1改善可擴展性243
11.1.2改善持久性/可靠性244
11.1.3提供隔離性244
11.2復制基礎244
11.2.1主服務器的定義245
11.2.2輔助服務器的定義245
11.2.3仲裁服務器的定義246
11.3深入學習oplog246
11.4實現復制集247
11.4.1創建復制集248
11.4.2啟動復制集成員249
11.4.3向復制集中添加服務器250
11.4.4添加仲裁服務器255
11.4.5復制集鏈256
11.4.6管理復制集256
11.4.7為復制集成員配置選項261
11.4.8從應用連接到復制集262
11.5讀顧慮266
11.6小結266
第12章分片267
12.1了解分片的需求267
12.2對數據進行水平和垂直分區268
12.2.1對數據進行垂直分區268
12.2.2對數據進行水平分區268
12.3分析一個簡單的分片場景269
12.4使用MongoDB實現分片270
12.4.1創建分片設置271
12.4.2確定連接的方式277
12.4.3列出分片服務器的狀態278
12.4.4使用復制集實現分片279
12.5均衡器279
12.6哈希片鍵281
12.7標簽分片282
12.8添加更多配置服務器284
12.9小結285