2017-04-21 73 views
0

我有這樣的事情:多個數據庫和集合mongodump

dbs=$(mongo --quiet --eval "db.getMongo().getDBNames()" --host exemple.com | \ 
      grep '"' | tr -d '"' | tr -d ',') 

for db in $dbs; do 
    cols=$(mongo --quiet --eval "print(db.getCollectionNames())" $db \ 
        --host exemple.com | tr ',' ' ') 
    for col in $cols; do 
     mongodump --host example.com -q "{_id:{\$gt:$oid}}" \ 
        -d $dbs -c $col --out /data/ 
    done 
done 

我越來越:

位置參數不允許

如何使用mongodump對所有集合在所有數據庫中?

+0

雙引號所有的shell變量,'$ dbs','$ db','$ cols','$ col'。它可能無法解決問題,但在通過細節問題時很有用 – Inian

+0

'grep'「'| tr -d'」'| tr -d',''可以簡化爲:'tr -d'「,''。 – agc

回答

1

這裏是一個工作腳本:

dbs=`mongo --eval "db.getMongo().getDBNames()" | grep '"' | tr -d '",' ` 


    for db in $dbs; do 
     col=`mongo $db --host example.com --quiet --eval "db.getCollectionNames()" | tr -d ',"[]' ` 
     for collection in $col; do 
      mongodump --host example.com -q '{_id: {$gt: 10}}' -d $db -c $collection --out dump 

     done 
    done 

mongodump documentation

--query,-Q

提供了一個JSON文件作爲可選限制包括 文件查詢在mongodump的輸出中。您必須將查詢放在單引號(例如')中以確保它不與您的shell環境交互。

+0

本地mongodb正在工作,但是對於遠程我獲得本地db和集合也是 dbs ='mongo --eval」 db.getMongo()。getDBNames()「| grep'」'| tr'','' echo $ dbs for db in $ dbs; do col ='mongo $ db --host example.com --quiet --eval 「db.getCollectionNames()」| tr -d',「[]'' 收藏$ col;不要 mongodump --host example.com -q '{_id:{$ GT:10}}' -d $ DB -c $收集轉儲--out 做 做 – basante

+0

@basante確保更新主機名稱在2'mongo'調用和在mongodump中,並根據您的需要上傳查詢 – felix

+0

是的,當然我更改主機名,但我仍然得到當地的dbs。你可以給我看一個例子,也許我沒有正確設置--host – basante