2011-06-27 43 views
3

我們有mongo db,並且我們有一個我想用mongoexport工具導出到csv的集合列表。我需要經常這樣做,集合的名稱有時會改變。所以我想要做的是創建一個shell腳本,我可以運行它,它將遍歷mongo數據庫中的集合並創建csv文件。現在我有一個腳本,但它不是自動的,例如我在腳本中有以下內容。創建一個shell腳本來自動化mongo db中的csv導出

mongoexport -d mydbname -c mycollname.asdno3rnknlasfkn.collection --csv -f field1,field2,field3,field4 -o mycollname.asdno3rnknlasfkn.collection.csv 

在這所有的元素將保持不變,除了csv文件名和集合名稱,其中兩個都是相同的。

所以我想創建一個將

show collections 

然後通過集合名稱檢索循環的腳本和導出工具命令替換它。

回答

2

你不能從shell中通過mongo調用「show collections」。 我建議您使用您最喜歡的語言編寫一個小程序/程序 通過驅動程序的API獲取集合名稱,然後使用系統調用(system())通過腳本/程序執行 mongoexport。

+1

我做了類似的事情。我創建了一個.js文件來獲取所有集合,並創建一個shell腳本來捕獲它的輸出並生成導出命令 – swordfish

2
############################################################# 
Script 1 -- to produce a list of databases in MongoDB server 
############################################################# 

#!/bin/bash 
#################################################################### 
# PROGRAM:  mongolistdbs.sh 
# 
# PROGRAMMER: REDACTED 
# PURPOSE:  Program created to list databases in Mongo 
#    
# CREATED:  02/14/2011 
# 
# MODIFCATIONS: 
################################################################### 
#set -x 
#supply mongo connection parms: server and port 
mongo localhost:12345 --quiet <<!! 2>&1 
show dbs 
!! 


######################################################## 
Script 2 -- This is the driver that calls script 1 
######################################################### 
#################################################################### 
# PROGRAM:  mongodb_backup_driver.sh 
# 
# PROGRAMMER: REDACTED 
# PURPOSE:  Program created to drive the MongoDB full database 
#    backups 
# CREATED:  02/14/2011 
# 
# MODIFCATIONS: 
################################################################### 

#!/bin/bash 


     ################################################ 
     # backup strategy is individual backup 
     # of all databases via loop and db list 
     # (dbparm is empty string) 
     ############################################### 
     echo "Strategy: All via Individual Loop" 

     #################################### 
     ### here is the call of script 1 
     #################################### 
     DBs=`./mongolistdbs.sh | cut -f1 | egrep -v ">"` 
     for db in $DBs; 
     do 
       echo "Driver loop for backup of [ ${db} ]" 
       ############################################################# 
       ### here im calling my backup script (not supplied) 
       ### with database as a parameter within a loop 
       ### to backup all databases individually 
       ############################################################# 
       ./royall_mongodb_backup.sh ${db} 
     done 
4

這可以很容易地通過外殼來實現 - 不知道上述評論是指舊版本蒙戈外殼... 例子:

echo 'show collections' | mongo dbname --quiet 
相關問題