前言
在工作中偶爾會遇到遷移數據等操作窃诉。比如如下場景:
- 數據庫備份(容災)
- 導出服務端數據(統(tǒng)計)
- 將服務端數據放入本地(搭建開發(fā)環(huán)境)
- 跨網段傳輸數據(網絡不通)
不管你出于什么原因鹉梨,一定要學一寫數據遷移操作。
遷移工具
MongoDB提供了兩個工具廓奕,分別用于數據的導出和導入:
- mongoexport
- mongoimport
這兩個工具可以將數據庫中的集合導出為CSV或者JSON格式的文件。
注意:遷移單位是”集合“档叔,不是數據庫桌粉、也不是某個文檔。
這兩個工具是命令行工具蹲蒲,并沒有可視化界面番甩。
接下來,我們需要了解這兩個工具的參數届搁,來對工具有一個宏觀上的了解缘薛。
參數說明
命令行中輸入如下命令,可以查看mongoexport的參數說明卡睦。
mongoexport --help
image.png
好在參數不多宴胧,我們可以逐項了解。
- general options(常見選項):
- --help: 幫助文檔
- --version: 查看工具版本號
- --config=: 配置文件的路徑
- verbosity options(細節(jié)選項):
- -v, --verbose=<level>: 詳細的日志輸出
- --quiet: 隱藏所有輸出表锻。
- connection options(連接選項):
- -h, --host=<hostname>: 要連接的Mongo服務器地址
- --port=<port>: Mongo服務端口號恕齐,可以和--host參數一同使用,例如瞬逊,--host hostname:port
- ssl options(SSL選項):
- --ssl: 通過SSL協(xié)議連接Mongo显歧,前提是Mongo需要開啟SSL
- --sslCAFile=<filename>: 包含根證書的.pem文件
- --sslPEMKeyFile=<filename>: 包含秘鑰和證書的.pem文件
- --sslPEMKeyPassword=<filename>: 解密sslPEMKeyFile文件的密碼
- --sslCRLFile=<filename>: 沒理解
- --sslFIPSMode: 使用FIPS模式替代openssl庫
- --tlsInsecure: 繞過服務器證書驗證
- authentication options(認證選項):
- -u, --username=<username>: MongoDB用戶名
- -p, --password=<password>: MongoDB密碼
- --authenticationDatabase=<database-name> : 需要賬號密碼校驗后連接的數據庫
- --authenticationMechanism=<mechanism>: 沒理解
- --awsSessionToken=<aws-session-token>: 通過亞馬遜IAM(身份角色)的令牌
- kerberos options(不安全網絡環(huán)境選項):
- --gssapiServiceName=<service-name>: 當使用GSSAPI或者Kerberos協(xié)議時的服務名。
- --gssapiHostName=<host-name>: 當使用GSSAPI或者Kerberos協(xié)議時的主機名确镊。
- namespace options(命名空間選項):
- -d, --db=<database-name>: 數據庫名稱
- -c, --collection=<collection-name>: 集合名稱
- uri options(連接字符串選項):
- --uri=<mongodb-uri>: 連接mongo時使用的字符串
- output options(輸出選項):
- -f, --fields=<field>[,<field>]*: 導出的字段名稱士骤,如果有多個字段用逗號隔開
- --fieldFile=<filename>: 沒理解。
- --type=<type>: 導出文件的格式蕾域,支持json或者csv
- -o, --out=<filename>:導出的文件名
- --jsonArray: 輸出為json數組格式拷肌,而非每行一個文檔對象
- --pretty: 輸出時格式化json
- --noHeaderLine: 導出為csv格式時到旦,是否包含字段名作為csv第一行(不加此參數是帶字段名的)
- --jsonFormat=<type>: 沒理解
- querying options(查詢選項):
- -q, --query=<json>: 支持json格式的篩選條件,導出篩選后的數據
- --queryFile=<filename>: 存放json格式的篩選條件巨缘,從文件中讀取查詢條件添忘。
- --readPreference=<string>|<json>: 沒理解
- --forceTableScan: 沒理解
- --skip=<count>: 跳過前N個文檔
- --limit=<count>: 導出N個文檔
- --sort=<json>: 對導出的數據排序,例如 '{x:1}'
- --assertExists: 如果指定此參數若锁,在集合不存在時會報錯
mongoimport --help
image.png
mongoimport的大部分參數和mongoexport是一樣的搁骑,我們僅看一下不一樣的部分即可。
- input options(輸入選項):
- -f, --fields=<field>[<field>, ]*: 限定導入的字段拴清,如果有多個字段用逗號隔開
- --fieldFile=<filename>: 可以將字段名寫入文件中靶病,然后通過此文件來指定導入的字段名
- --file=<filename>: 從文件中導入數據到數據庫
- --headerlien: 用文件的第一行作為字段名稱,僅導入csv文件時可用
- --jsonArray: 將輸入的數據源看做json數組
- --parseGrace=<grace>: 輸入數據類型錯誤時口予,4種模式可選娄周,"autoCast"(自動轉換), "skipField"(跳過字段), "skipRow"(跳過此文檔/行),"stop"(停止,默認選項)
- --type=<type>: 數據文件的格式沪停,csv煤辨、json、tsv
- --columnHaveType: 沒看懂
- --legacy: 校驗json格式是否合法
- --useArrayIndexFields: 沒看懂
- ingest options(攝入選項):
- --drop: 插入數據前先刪除集合
- --ignoreBlanks: 忽略csv文件中的空行
- --maintainInsertionOrder: 保證文檔插入順序
- --numInsertionWorkers=<number>: 并發(fā)插入木张,指定線程數量
- --stopOnError: 發(fā)生錯誤時停止
- --mode=[insert|upsert|merge|delete]: 僅插入众辨,跳過匹配的文檔。插入新文檔舷礼,或替換已經存在的文檔鹃彻。插入新文檔,或修改已經存在的文檔妻献。刪除匹配的文檔蛛株。