MongoDB數據庫
MongoDB簡介
MongoDB是什麼?
MongoDB是一個由 C++ 語言編寫的文檔型數據庫,屬於非關係型數據庫中的一種。旨在爲 Web 應用提供可擴展的高性能數據存儲解決方案。
爲什麼要學習MongoDB?
- 提供高效的數據存儲
- 操作語法簡單
MongoDB可以做什麼?
- 數據存儲
MongoDB和傳統的數據庫有啥區別?
MongoDB是文檔型數據庫,屬於非關係型數據庫中的一種。而傳統的數據庫,例如MySQL、Oracle都是數據關係型數據庫。那麼非關係型數據庫和關係型數據庫有啥區別?
NoSQL RDBMS
非結構化的數據 --> key-value 高度結構化的數據 --> 二維表
無結構化的查詢語言 結構化的查詢語言(SQL)
一般社區維護 官方團隊
較爲年輕 非常成熟
關係型數據庫與mongodb對比
- 存儲方面對比:在傳統的關係型數據庫中,存儲方式是以表的形式存放,而在MongoDB中,以文檔的形式存在。
- 數據庫中的對應關係,及存儲形式的說明
一些有用的資源
MongoDB入門學習
菜鳥教程-MongoDB
MongoDB安裝和入門使用
MongoDB下載
MongoDB安裝
參考【資料裏面的 MongoDB 安裝教程】
入門使用
MongoDB是一個C/S架構的軟件。如果要使用 MongoDB ,則必須先啓動 MongoDB 服務,然後在通過客戶端進行操作。MongoDB默認在安裝目錄的 bin 目錄下提供了一個 mongo.exe 的客戶端命令,我們可以通過該命令來操作MongoDB。
MongoDB服務啓動: Windows + r 鍵 打開命令行,輸入如下的命令查看MongoDB的服務。
> services.msc
當服務啓動後,則使用 mongo 命令進行操作
> mongo --host 127.0.0.1 --port 27017
注意:如果是在本機,則可以省略 --host 和 --port
> mongo
總結:通過上面的操作我們基本瞭解了 MongoDB 的功能,接下來我們將學習更多的命令進行 MongoDB 的操作。
命令行操作MongoDB
數據庫常用命令
-
Help 查看命令提示
獲取數據庫級別的幫組
> db.help();
獲取集合級別的幫組
> db.集合名稱.help(); -
創建/切換數據庫
> use dbName; -
查詢數據庫
> show dbs; -
顯示當前 DB 狀態
> db.serverStatus(); -
查看當前 DB 版本
> db.version(); -
查看當前 DB 的鏈接機器IP地址(客戶端IP地址)
>db.getMongo(); -
刪除數據庫
> use 待刪除的數據庫
> db.dropDatabase();
Collection 聚集集合操作
-
創建一個聚集集合
> db.createCollection(集合名稱); -
得到當前 db的所有聚集集合
> show dbs;
或者
> show collections; -
顯示當前 db 所有聚集的狀態
> db.集合名稱.stats();
document 文檔操作
-
插入文檔
> db.集合名稱.insert(對象或數組); -
獲得當前 db 的所有文檔
> db.集合名稱.find();
格式化輸出
> db.集合名稱.find().pretty(); -
按條件獲取文檔
> db.集合名稱.find({查詢的Field: 值}); -
返回滿足條件文檔的指定字段
> db.集合名稱.find({查詢的Field: 值}, {待顯示的Field: 1, 不顯示的Field: 0}); -
更新文檔
db.集合名稱.update({查詢條件}, {$set: {待更新的記錄}}); -
刪除文檔
db.集合名稱.remove({刪除條件}); -
查詢單條文檔
> db.集合名稱.findOne();
聚合操作
-
條件操作符
- (>) 大於 - $
- gt(<) 小於 - $
- lt(>=) 大於等於 - $
- gte(<= ) 小於等於 - $lte
-
獲取文檔總數
> db.集合名稱.count(); -
Limit 與 Skip 方法
> db.集合名稱.find().limit(NUMBER).skip(NUMBER); -
排序
- 可以使用 sort() 方法對數據進行排序,sort() 方法可以通過參數指定排序的字段,並使用 1 和 -1 來指定排序的方式,其中 1 爲升序排列,而 -1 是用於降序排列。
db.集合名稱.find().sort({排序字段:1})
- 可以使用 sort() 方法對數據進行排序,sort() 方法可以通過參數指定排序的字段,並使用 1 和 -1 來指定排序的方式,其中 1 爲升序排列,而 -1 是用於降序排列。
-
索引
> db.users.ensureIndex({gender:1,user_name:1}); -
查詢分析
- 查詢分析可以確保我們所建立的索引是否有效,是查詢語句性能分析的重要工具 。
- 查詢分析常用函數有:explain() 和 hint()
db.集合名稱.find(查詢條件,顯示字段).explain() - indexOnly: 字段爲 true ,表示我們使用了索引。
- cursor:因爲這個查詢使用了索引,MongoDB 中索引存儲在B樹結構中,所以這是也使用了
- BtreeCursor 類型的遊標。如果沒有使用索引,遊標的類型是 BasicCursor。這個鍵還會給出你所使用的索引的名稱,你通過這個名稱可以查看當前數據庫下的system.indexes集合(系統自動創建,由於存儲索引信息,這個稍微會提到)來得到索引的詳細信息。
- n:當前查詢返回的文檔數量。
- nscanned/nscannedObjects:表明當前這次查詢一共掃描了集合中多少個文檔,我們的目的是,讓這個數值和返回文檔的數量越接近越好。
- millis:當前查詢所需時間,毫秒數。
- indexBounds:當前查詢具體使用的索引
Robo3T 使用
Robo3T 是什麼?
Robo 3T是一個支持windows、Mac、Linux三個平臺的mongo圖形化客戶端 。
官網:https://robomongo.org/
爲什麼要使用 Robo3T?
命令行工具操作MongoDB效率太低,所以使用圖形化操作。
Robo3T的使用
- 安裝
- 基本使用
Mongoose 操作 Mongodb
Mongoose 是什麼?
Mongoose是一個對mongodb進行便捷操作的js工具包。
Mongoose 的使用
- 安裝
- 使用
代碼託管和webserver和apiserve部署
代碼部署
webserver部署
apiserver部署
日常疑問?
- 常見的MongoDB可視化客戶端有哪些?
- MongoDB登錄授權處理該如何實現?
擴展
- studio 3t 和 robo 3t 之間有啥區別:https://www.oschina.net/p/robo+3t