我们有mongo db,因为我们有一个集合列表,我想使用mongoexport工具导出到csv。我需要经常这样做,集合的名称有时也会改变。所以我想做的是创建一个我可以运行的shell脚本,它将迭代mongo db中的集合并创建csv文件。现在我有一个脚本,但它不是自动的,例如我在脚本中有以下内容。
mongoexport -d mydbname -c mycollname.asdno3rnknlasfkn.collection --csv -f field1,field2,field3,field4 -o mycollname.asdno3rnknlasfkn.collection.csv
除此之外,所有元素都将保持相同,除了csv filename和两者都相同的集合名称。
所以我想创建一个
的脚本 show collections
然后遍历检索到的集合名称,并在导出工具命令中替换它。
答案 0 :(得分:4)
这可以通过shell轻松完成 - 不知道上面的评论是否涉及旧版本的mongo shell ... 例如:
echo 'show collections' | mongo dbname --quiet
答案 1 :(得分:2)
你不能通过shell中的mongo调用“show collections”。 我建议你用你喜欢的语言写一个小skript /程序 通过驱动程序的API获取集合名称,然后执行 使用系统调用(system())通过脚本/程序mongoexport。
答案 2 :(得分: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