MongoDB的單個實例可以容納多個獨立的數據庫,每一個都有自己的集合和權限,不同的數據庫也放置在不同的文件中。
mongo --port 27017
mongo 的默認端口爲27017,數據傳輸協議 TCP,數據庫目錄 /data/db
1. mongo 使用shell 的常用命令
1. show dbs #顯示已有的數據庫列表
2. show collections # 已有集合列表
3. show users # 已有用戶列表
4. use dbname # 切換到某個數據庫,若系統沒有會延遲創建該數據庫
5. db.collectionName.insert("x":"y") # 插入一個文檔,若不存在這個collection 會默認創建
6. db.collectionName.find() # 查看集合數據
7. db.dropDatabase() # 刪除某個數據庫
8. db.collectionName.drop()# 刪除某個集合
9. Help查看命令提示
> db.help();
>db.collectionName.help();
>db.collectionName.find().help();
> rs.help();
10.從指定的機器上覆制指定數據庫數據到某個數據庫
>db.copyDatabase("mydb", "temp", "127.0.0.1");#將本機的mydb的數據複製到temp數據庫中
11. db.repairDatabase() # 修復當前數據庫
12. 查看當前使用的數據庫
> db
> db.getName()
13. db.stats() # 顯示當前db 的狀態
14. db.version() # 當前db版本
15. db.getMongo() # 查看當前db的鏈接機器地址
簡單的shell 命令使用如下圖:
由於mongo和我們常用的關係型數據庫不同,下圖列出了 RDBMS 與 MongoDB 對應的術語:
mongo 命名的規則
1.庫
庫名全部小寫,禁止使用任何_以外的特殊字符,禁止使用數字打頭的庫名,如:123_abc
庫以文件夾的形式存在,使用特殊字符或其它不規範的命名方式會導致命名混亂
數據庫名最多爲64字符
在創建新的庫前應儘量評估該庫的體積、QPS等,提前與DBA討論是應該新建一個庫還是專門爲該庫創建一個新的集羣
- 不能爲空字符串(” “)
- 不能以$開頭
- 不得含有’ '(空格)、.、$、/、\和\0 (空字符)
- 數據庫名區分大小寫(建議數據庫名全部使用小寫)
- 數據庫名最長爲64個字節
- 不要與系統保留的數據庫名相同,這寫數據庫包括:admin,local,config等
有一些數據庫名是保留的,可以直接訪問這些有特殊作用的數據庫。
- admin: 從權限的角度來看,這是"root"數據庫。要是將一個用戶添加到這個數據庫,這個用戶自動繼承所有數據庫的權限。一些特定的服務器端命令也只能從這個數據庫運行,比如列出所有的數據庫或者關閉服務器。
- local: 這個數據永遠不會被複制,可以用來存儲限於本地單臺服務器的任意集合
- config: 當Mongo用於分片設置時,config數據庫在內部使用,用於保存分片的相關信息。
2.集合
集合名全部小寫,禁止使用任何_以外的特殊字符,禁止使用數字打頭的集合名,如:123_abc,禁止system打頭
system是系統集合前綴
集合名稱最多爲64字符
爲了避免庫級鎖帶來的問題,應儘量對寫入較大的集合使用“單庫單集合”的結構,所以對於新增業務應儘量創建新庫,而不是在現有庫中創建新集合
一個庫中寫入較大的集合會影響其它集合的讀寫性能
如果評估單集合數據量較大,可以將一個大表拆分爲多個小表,然後將每一個小表存放在獨立的庫中,由於MongoDB是庫級鎖,因此這樣做可以大幅減少併發寫入帶來的鎖爭用問題
- 集合名不能爲空字符串(” “)
- 不能包含\0或空字符,這個字符表示鍵的結尾
- 集合名不能以”system.”開頭,此前綴是系統本身保留的
- 集合名不能包含$字符(注:可包含 . 點號)
集合存在於數據庫中,集合沒有固定的結構,這意味着你在對集合可以插入不同格式和類型的數據,但通常情況下我們插入集合的數據都會有一定的關聯性。
3.文檔
文檔是一組鍵值(key-value)對(即BSON)。MongoDB 的文檔不需要設置相同的字段,並且相同的字段不需要相同的數據類型,這與關係型數據庫有很大的區別,也是 MongoDB 非常突出的特點。
需要注意的是:
- 文檔中的鍵/值對是有序的。
- 文檔中的值不僅可以是在雙引號裏面的字符串,還可以是其他幾種數據類型(甚至可以是整個嵌入的文檔)。
- MongoDB區分類型和大小寫。
- MongoDB的文檔不能有重複的鍵。
- 文檔的鍵是字符串。除了少數例外情況,鍵可以使用任意UTF-8字符。
文檔鍵命名規範:
- 鍵不能含有\0 (空字符)。這個字符用來表示鍵的結尾。
- 和$有特別的意義,只有在特定環境下才能使用。
- 以下劃線"_"開頭的鍵是保留的(不是嚴格要求的)。
mongo 的數據工具
- 數據庫組件: mongod 、mongos 、mongo
mongod : 用來啓動mongo 服務
mongos: 數據分片
mongo: 進入mongo 的shell 工具
數據庫自帶工具使用
一 、mongodump 備份導出數據庫
- 1.常用命令格式
mongodump -h IP --port 端口 -u 用戶名 -p 密碼 -d 數據庫 -c 表 -o 文件存放路徑
參數說明:
-h 指明數據庫宿主機的IP
–port 指明數據庫的端口
-u 指明數據庫的用戶名
-p 指明數據庫的密碼
-d 指明數據庫的名字
-c 指明collection的名字
-o 指明到要導出的文件名
-q 指明導出數據的過濾條件
命令如下圖:
- 2.導出所有數據庫
mongodump -o /data/mongobak/
- 3.導出指定數據庫
mongodump -d SERVERLOG -o /data/mongobak/SERVERLOG.bak/
二 、mongorestore恢復數據庫
- 1.常用命令格式
mongorestore -h IP --port 端口 -u 用戶名 -p 密碼 -d 數據庫 --drop 文件存在路徑
--drop:先刪除所有的記錄,然後恢復.
- 2.恢復所有數據庫到mongodb中
mongorestore /data/mongobak/ #所有庫的備份路徑
- 3.恢復指定的數據庫
mongorestore -d SERVERLOG /data/mongobak/SERVERLOG.bak/SERVERLOG/ #SERVERLOG這個數據庫的備份路徑
mongorestore -d SERVERLOG_new /data/mongobak/SERVERLOG.bak/SERVERLOG/ #將SERVERLOG備份數據還原到SERVERLOG_new數據庫中
三、 mongoexport導出(表或者表中部分字段)
- 1.常用命令格式
mongoexport -h IP --port 端口 -u 用戶名 -p 密碼 -d 數據庫 -c 表名 -f 字段 -q 條件導出 --csv -o 文件名
參數重點說明:
-f 導出指定字段,以逗號分割,-f uid,name,age導出uid,name,age這三個字段
-q 可以根據查詢條件導出,-q ‘{ “uid” : “100” }’ 導出uid爲100的數據
–csv 表示導出的文件格式爲csv的。這個比較有用,因爲大部分的關係型數據庫都是支持csv,在這裏有共同點
- 2.導出整張表
mongoexport -d SERVERLOG -c users -o /data/mongobak/SERVERLOG.bak/users.dat
- 3.導出表中部分字段
mongoexport -d SERVERLOG -c users --csv -f name,age -o /data/mongobak/SERVERLOG.bak/users.csv
- 4.根據條件導出數據
mongoexport -d SERVERLOG -c users -q '{uid:{$gt:1}}' -o /data/mongobak/SERVERLOG.bak/users.json
四、 mongoimport導入(表或者表中部分字段)
- 1.常用命令格式
恢復整表導出的非csv文件
mongoimport -h IP --port 端口 -u 用戶名 -p 密碼 -d 數據庫 -c 表名 --upsert --drop 文件名
--upsert:插入或者更新現有數據
恢復部分字段的導出文件
mongoimport -h IP --port 端口 -u 用戶名 -p 密碼 -d 數據庫 -c 表名 --upsertFields 字段 --drop 文件名
--upsertFields:更新部分的查詢字段,必須爲索引,以逗號分隔.
恢復導出的csv文件
mongoimport -h IP --port 端口 -u 用戶名 -p 密碼 -d 數據庫 -c 表名 --type 類型 --headerline --upsert --drop 文件名
--type:導入的文件類型(默認json)
- 2.恢復導出的表數據
mongoimport -d SERVERLOG -c users --upsert /data/mongobak/SERVERLOG.bak/users.dat
- 3.部分字段的表數據導入
mongoimport -d SERVERLOG -c users --upsertFields uid,name,age /data/mongobak/SERVERLOG.bak/users.dat
- 4.恢復csv文件
mongoimport -d SERVERLOG -c users --type csv --headerline --file /data/mongobak/SERVERLOG.bak/users.csv
--file:需要導入的文件
查看.bson 文件
- bsondump //db.bson
如下圖: