mongo 概念介紹以及數據庫操作

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

如下圖:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章