1. 基本概念:
1.1. MongoDB 保留數據庫名:
- admin: 從權限的角度來看,這是"root"數據庫。要是將一個用戶添加到這個數據庫,這個用戶自動繼承所有數據庫的權限。一些特定的服務器端命令也只能從這個數據庫運行,比如列出所有的數據庫或者關閉服務器
- local: 這個數據永遠不會被復制,可以用來存儲限於本地單台服務器的任意集合
- config: 當Mongo用於分片設置時,config數據庫在內部使用,用於保存分片的相關信息
2. 數據庫
2.1. 查詢數據庫
// ----- 查看所有數據庫
show dbs
// ----- 查詢當前所在數據庫
db
2.2. 創建\切換數據庫
// ----- DB_NAME: 數據庫名, 當該名稱數據庫不存在時, 創建數據庫; 當該名稱數據庫存在時, 切換數據庫.
use DB_NAME
3.3. 刪除數據庫
// ----- 切換到需要刪除的數據庫, 然后進行刪除
db.dropDatabase()
3. 集合
3.1. 查看所有的集合
show collectios
3.2. 創建集合
// ----- 方式1: 創建集合
/**
* name: 集合的名稱 [必填]
* options: 集合的內存大小及索引選項 [選填]
* * capped: (布爾), 如果為 true,則創建固定集合。固定集合是指有着固定大小的集合,當達到最大值時,它會自動覆蓋最早的文檔。當該值為 true 時,必須指定 size 參數。
* * autoIndexId: 如為 true,自動在 _id 字段創建索引。默認為 false。
* * size: 為固定集合指定一個最大值(以字節計)。如果 capped 為 true,也需要指定該字段。
* * max: 指定固定集合中包含文檔的最大數量。
*/
db.createCollection(name, [options])
// ----- 方式2: 插入文檔時, 自動創建集合
3.3. 刪除集合
db.test.drop()
4. 文檔
4.1. 插入文檔
// ***** 注: 插入文檔時, 當指定的集合不存在時, 會自動創建集合
// ----- 插入一條文檔
db.COLLECTION_NAME.insertOne(document) // ----- 插入多條文檔
db.COLLECTION_NAME.insertMany([document, document......])
4.2. 查詢所有文檔
db.test.find()
4.3. 更新文檔
/**
* quety: update的查詢條件,類似 SQL SELECT 語句的WHERE條件。當條件為空時, 匹配所有文檔
* update: update的對象和一些更新的操作符(如$set,$inc...)等,類似於 SQL UPDATE 語句中的SET語句
*/
// ----- 更新第一條符合條件的文檔
db.COLLECTION_NAME.updateOne(<query>, <update>) // ----- 更新所有符合條件的文檔
db.COLLECTION_NAME.updateMany(<query>, <update>)
4.4. 刪除文檔
// ***** query: 刪除文檔的條件, 當條件為空時, 則匹配所有文檔, 類似於 SQL DELETE 語句中的WHERE條件
// ----- 刪除第一條符合條件的文檔
db.COLLECTION_NAME.deleteOne(<query>)
// ----- 刪除所有符合條件的文檔 db.COLLECTION_NAME.deleteMany(<query>)
4.5. 回收磁盤空間
db.repairDatabase()
5. 文檔的查詢 [基礎條件]
5.1. 條件查詢 [等於 ==]
// ----- 方式1
db.COLLECTION_NAME.find({KEY: VALUE})
// ----- 方式2
db.COLLECTION_NAME.find({KEY: {$eq: VALUE}})
5.2. 條件查詢 [大於 >]
db.COLLECTION_NAME.find({KEY: {$gt: VALUE}})
5.3. 條件查詢 [大於等於 >=]
db.COLLECTION_NAME.find({KEY: {$gte: VALUE}})
5.4. 條件查詢 [小於 <]
db.COLLECTION_NAME.find({KEY: {$lt: VALUE}})
5.5. 條件查詢 [小於等於 <=]
db.COLLECTION_NAME.find({KEY: {$lte: VALUE}})
5.6. 條件查詢 [不等於 !=]
db.COLLECTION_NAME.find({KEY: {$ne: VALUE}})
6. 文檔的查詢 [組合條件]
6.1. AND
db.COLLECTION_NAME.find({$and: [{KEY1: {VALUE1}}, {KEY2: {VALUE2}}]})
6.2. OR
db.COLLECTION_NAME.find({$or: [{KEY1: {VALUE1}}, {KEY2: {VALUE2}}]})
7. 文檔的查詢 [數據類型]
// ***** type_num: 表格中對應的數字; type_str: 表格中對應的類型.
db.COLLECTION_NAME.find({KEY: {$type: <type_num>}}) db.COLLECTION_NAME.find({KEY: {$type: <type_str>}})
8. 文檔的查詢 [排序和分頁]
8.1. 排序
// ***** KEY: 排序的字段; SORT: 排序的規則 [1: 正序; -1: 倒序].
db.COLLECTION_NAME.find({}).sort({KEY: SORT})
8.2. 分頁
// ***** NUM1: 讀取的記錄條數; NUM2: 跳過的記錄條數.
db.COLLECTION_NAME.find().limit(NUM1).skip(NUM2)
8.3. 排序和分頁
// ***** 注: skip & limilt & sort 三個放在一起執行的時候,執行的順序是先 sort > skip > limit
db.COLLECTION_NAME.find().sort({KEY: SORT}).limit(NUM1).skip(NUM2)
9. 索引
9.1. 創建索引
// ----- keys: 想要創建索引的字段, 1為升序創建索引, -1為降序創建索引
db.COLLECTION_NAME.createIndex(keys, [options])
9.2. 查看集合索引
// ----- 查看集合索引
db.COLLECTION_NAME.getIndexes()
// ----- 查看集合索引大小
db.COLLECTION_NAME.totalIndexSize()
9.3. 刪除集合索引
// ----- 根據索引名稱刪除指定索引
db.COLLECTION_NAME.dropIndex(INDEX_NAME)
// ----- 刪除集合所有的索引 (默認索引不能刪除)
db.COLLECTION_NAME.dropIndexes()
10. 函數 [聚合]
10.1. 求和
// ----- KEY1: 集合中文檔分組的字段; KEY2: 求和的字段.
db.COLLECTION_NAME.aggregate([{$group: {_id: "$KEY1", _likes: {$sum: "$KEY2"}}}])
10.2. 求平均值
// ----- KEY1: 集合中文檔分組的字段; KEY2: 求平均值的字段. db.COLLECTION_NAME.aggregate([{$group: {_id: "$KEY1", _likes: {$avg: "$KEY2"}}}])
10.3. 求最小值
// ----- KEY1: 集合中文檔分組的字段; KEY2: 求最小的字段. db.COLLECTION_NAME.aggregate([{$group: {_id: "$KEY1", _likes: {$min: "$KEY2"}}}])
10.4. 求最大值
// ----- KEY1: 集合中文檔分組的字段; KEY2: 求最大值的字段. db.COLLECTION_NAME.aggregate([{$group: {_id: "$KEY1", _likes: {$max: "$KEY2"}}}])
10.5. 獲取排序后的第一個文檔
// ----- KEY1: 集合中文檔分組的字段; KEY2: 排序的字段. db.COLLECTION_NAME.aggregate([{$group: {_id: "$KEY1", _likes: {$first: "$KEY2"}}}])
10.6. 獲取排序后的最后一個文檔
// ----- KEY1: 集合中文檔分組的字段; KEY2: 排序的字段. db.COLLECTION_NAME.aggregate([{$group: {_id: "$KEY1", _likes: {$last: "$KEY2"}}}])