1、使用工具Studio 3T for MongoDB
選擇一個數據庫中的Collections集合,然后按住 Ctrl+C 復制快捷鍵會彈出如下幫助框。
點擊 Ctrl+V 粘貼快捷鍵,重命名一下復制的名稱即可。
2、使用工具Robo 3T
在Collection中,右鍵選擇復制Collection
然后重命名即可
3、利用foreach方法在shell里直接運行
在同一個主機上從一個db的表復制到另一個db的表
db.collection_name.find().forEach(function(d){ db.getSiblingDB('new_database')['collection_name'].insert(d); })
collection_name是數據庫表名
new_database是目的數據庫
克隆本地collection,mongodb沒有提供命令進行本地復制,但我們可以寫一個循環插入的方法完成
在同一個主機上同一個db下復制一個表
db.復制源表名.find().forEach(function(x){ db.目的表名.insert(x); })
例子:
db.t_sentiment_ids.find().forEach(function(x){ db.t_sentiment_ids22.insert(x); })
4、 復制數據庫
4.1
db.copyDatabase(fromdb,todb,fromhost,username,password,mechanism)
后面四個選項可選:
fromdbt: 源db;
todb: 目標db;
fromhost: 源db的主機地址,如果在同一個mongod實例內可以省略;
username: 如果開啟了驗證模式,需要源DB主機上的MongoDB實例的用戶名;
password: 同上,需要對應用戶的密碼;
mechanism: fromhost驗證username和password的機制,有:MONGODB-CR、SCRAM-SHA-1兩種。
例
db.copyDatabase('test','test2','192.168.14.52:27017','test','test','SCRAM-SHA-1')
不帶密碼認證的測試成功了,帶密碼認證的還未成功
4.2
db.runCommand() { copydb: 1, fromhost: <hostname>, fromdb: <database>, todb: <database>, slaveOk: <bool>, username: <username>, nonce: <nonce>, key: <key> }
fromhost: 可選,見4.1;
slaveOK: 可選,設置為true,允許從secondary復制數據,此時fromehost必須被設置;
username: 可選,見4.1;
nonce: 遠程服務器上產生的一次性共享密鑰;
key: 對password的hash值
5、 復制Collection
5.1 runCommand
db.runCommand({ cloneCollection:<namespace> fromhost:<hostname> query: <filter> });
例
db.runCommand({ cloneCollection:'testdb.testcol', from:'192.168.1.12:27017', copyIndexes:false, query:{'age':{'gt':2}} });
copyIndexes:是否復制索引
5.2 db.cloneCollection
db.cloneCollection(from, collection, query)
6、 其它
刷新磁盤:將內存中尚未寫入磁盤的信息寫入磁盤,並鎖住對數據庫更新的操作,但讀操作可以使用,使用runCommand命令,這個命令只能在admin庫上執行
格式:db.runCommand({fsync:1,async:true})
async:是否異步執行
lock:1 鎖定數據庫
數據壓縮:mongodb的存儲結構采用了預分配的機制,長期不斷的操作,會留下太多的的碎片,從而導致數據庫系統越來越慢。
repairDatabase命令是mongodb內置的一個方法,它會掃描數據庫中的所有數據,並將通過導入/導出來重新整理數據集合,將碎片清理干凈
現在看壓縮前和壓縮后的對比數據,如下所示:
PRIMARY> db.t1.storageSize() 65232896 PRIMARY> db.t1.totalSize() 81470432 PRIMARY> db.repairDatabase() { “ok” : 1 } PRIMARY> db.t1.storageSize() 65232896 PRIMARY> db.t1.totalSize() 79851584