簡介
mongodb提供了mongoexport/mongoimport以支持將數據表進行導入導出。
導入導出命令一般用於特殊的數據處理用途,由於不包含索引處理,且json格式無法支持所有bson類型,因此不適合用於重要數據的備份恢復。
參考文檔
https://docs.mongodb.com/manual/reference/program/mongoimport/
https://docs.mongodb.com/manual/reference/program/mongoexport/
mongoexport用法
說明
mongoexport 支持將mongodb數據表導出為json或csv格式,可在導出時指定一定的查詢條件實現過濾。
命令的執行要求當前用戶對數據庫有read權限;
在mongos或副本集上執行時,默認采用primary readperference選項,即優先從主庫上讀取。
示例用法
./mongoexport --host 127.0.0.1 --port 27017 -d appdb -c T_TEST_DATA -u appuser -p appuser@2016 -o export/T_TEST_DATA.json
參數說明
參數名 | 參數值 |
---|---|
host[h] | 主機 |
port | 端口 |
db[d] | 目標數據庫 |
username[u] | 用戶名 |
password[p] | 密碼 |
authenticationDatabase | 鑒權數據庫,不指定則使用database參數 |
collection[c] | 目標Collection |
query[q] | 查詢過濾條件,不指定則導出全表 |
out[o] | 目標輸出文件 |
type | 格式類型,默認json |
skip | skip條件 |
limit | limit條件 |
sort | sort條件 |
其他用法
//按分頁導出
mongoexport -d test -c records --sort '{a: 1}' --limit 100 --skip 100 --out export.1.json
//按查詢條件導出
mongoexport -d test -c records -q '{ a: { $gte: 3 } }' --out exportdir/myRecords.json
mongoimport用法
說明
mongoimport 支持將json或csv格式的數據文件導入到mongodb數據庫,該命令與mongoexport結合使用。
命令的執行要求當前用戶對數據庫有readWrite權限;
導入命令要求在mongos或副本集主節點上執行。
示例用法
./bin/mongoimport --host 127.0.0.1 --port 27017 -d appdb -c T_TEST_DATA_1 -u appuser -p appuser@2016 --numInsertionWorkers 50 --file export/T_TEST_DATA.json
參數說明
參數名 | 參數值 |
---|---|
host[h] | 主機 |
port | 端口 |
db[d] | 目標數據庫 |
username[u] | 用戶名 |
password[p] | 密碼 |
authenticationDatabase | 鑒權數據庫,不指定則使用database參數 |
collection[c] | 目標Collection,不指定則采用文件名稱 |
drop | 指定該選項,則導入前刪除表 |
file | 目標導入文件 |
type | 格式類型,默認json |
mode | 導入模式,有insert、upsert、merge,默認insert |
numInsertionWorkers | 並發數 |
導入模式
upsert模式,會將已有數據替換;
merge模式,會將已有數據進行合並;
執行效率
使用insert的性能最高,建議使用;
在多核的環境中,通過numInsertionWorkers可指定並發運行,可提升一定效率。
參考數據
使用mongoexport 導出860W的數據記錄,文件大小2.9G,共耗時10分鍾
使用mongoimport 導入860W的數據記錄,使用--mode=insert模式,用時3分鍾15秒(numInsertionWorkers=50)
使用mongoimport 導入860W的數據記錄,使用--mode=insert模式,用時5分鍾(numInsertionWorkers=1)
使用mongoimport 導入860W的數據記錄,使用--mode=upsert模式,用時45分鍾(numInsertionWorkers=1)
使用mongodump 導出為40s,而mongorestore為4分鍾。