如何导出MongoDB中的所有集合?
我想通过以下命令导出MongoDB中的所有集合:如何导出MongoDB中的所有集合?,mongodb,export,Mongodb,Export,我想通过以下命令导出MongoDB中的所有集合: mongoexport -d dbname -o Mongo.json 结果是: 没有指定集合 手册上说,如果不指定集合,将导出所有集合。 然而,为什么这不起作用 我的MongoDB版本是2.0.6。如果您对bson格式满意,那么您可以使用具有相同-d标志的mongodump实用程序。它将以bson格式将所有集合转储到转储目录(默认情况下,可以通过-o选项更改)。然后可以使用mongorestore实用程序导入这些文件。我为此编写了bash脚
mongoexport -d dbname -o Mongo.json
结果是:没有指定集合 手册上说,如果不指定集合,将导出所有集合。
然而,为什么这不起作用
我的MongoDB版本是2.0.6。如果您对bson格式满意,那么您可以使用具有相同-d标志的mongodump实用程序。它将以bson格式将所有集合转储到转储目录(默认情况下,可以通过-o选项更改)。然后可以使用mongorestore实用程序导入这些文件。我为此编写了bash脚本。只需使用2个参数(数据库名称、存储文件的目录)运行它 您可以使用
mongo--eval“printjson(db.getCollectionNames())”
获取集合列表
然后对它们进行mongoexport。
下面是ruby中的一个示例
out = `mongo #{DB_HOST}/#{DB_NAME} --eval "printjson(db.getCollectionNames())"`
collections = out.scan(/\".+\"/).map { |s| s.gsub('"', '') }
collections.each do |collection|
system "mongoexport --db #{DB_NAME} --collection #{collection} --host '#{DB_HOST}' --out #{collection}_dump"
end
我需要Windows批处理脚本版本。这条线索很有用,所以我想我也会给出我的答案
mongo "{YOUR SERVER}/{YOUR DATABASE}" --eval "rs.slaveOk();db.getCollectionNames()" --quiet>__collections.txt
for /f %%a in ('type __collections.txt') do @set COLLECTIONS=%%a
for %%a in (%COLLECTIONS%) do mongoexport --host {YOUR SERVER} --db {YOUR DATABASE} --collection %%a --out data\%%a.json
del __collections.txt
我在使用
set/p COLLECTIONS=时遇到了一些问题。对于懒惰的人,使用mongodump
,速度更快:
mongodump -d <database_name> -o <directory_backup>
mongodump-d-o
要“还原/导入”它(从目录\u backup/dump/):
mongorestore-d
这样,您就不需要单独处理所有集合。只需指定数据库即可
dburl=$1
username=$3
password=$4
db=$2
mongoAccess=mongodb+srv://$username:$password@$dburl/$db
Collections=$(mongo $mongoAccess --quiet --eval "db.getCollectionNames()" | sed 's/,/ /g' | tail +6)
#echo $Collections
for col in $Collections
do
if [ "$col" = "[" ] || [ "$col" = "]" ]
then
continue
else
echo "Exporting $col"
mongoexport --uri $mongoAccess --collection=$col --type json --out output-$col.json
fi
done
请注意,我建议不要将mongodump
/mongorestore
用于大数据存储。它非常慢,一旦您获得超过10/20GB的数据,恢复可能需要数小时。如果您想使用mongoexport和mongoimport从数据库导出/导入每个集合,我认为这对您很有帮助。
我已经多次使用类似的实用程序
LOADING=false
usage()
{
cat << EOF
usage: $0 [options] dbname
OPTIONS:
-h Show this help.
-l Load instead of export
-u Mongo username
-p Mongo password
-H Mongo host string (ex. localhost:27017)
EOF
}
while getopts "hlu:p:H:" opt; do
MAXOPTIND=$OPTIND
case $opt in
h)
usage
exit
;;
l)
LOADING=true
;;
u)
USERNAME="$OPTARG"
;;
p)
PASSWORD="$OPTARG"
;;
H)
HOST="$OPTARG"
;;
\?)
echo "Invalid option $opt"
exit 1
;;
esac
done
shift $(($MAXOPTIND-1))
if [ -z "$1" ]; then
echo "Usage: export-mongo [opts] <dbname>"
exit 1
fi
DB="$1"
if [ -z "$HOST" ]; then
CONN="localhost:27017/$DB"
else
CONN="$HOST/$DB"
fi
ARGS=""
if [ -n "$USERNAME" ]; then
ARGS="-u $USERNAME"
fi
if [ -n "$PASSWORD" ]; then
ARGS="$ARGS -p $PASSWORD"
fi
echo "*************************** Mongo Export ************************"
echo "**** Host: $HOST"
echo "**** Database: $DB"
echo "**** Username: $USERNAME"
echo "**** Password: $PASSWORD"
echo "**** Loading: $LOADING"
echo "*****************************************************************"
if $LOADING ; then
echo "Loading into $CONN"
tar -xzf $DB.tar.gz
pushd $DB >/dev/null
for path in *.json; do
collection=${path%.json}
echo "Loading into $DB/$collection from $path"
mongoimport $ARGS -d $DB -c $collection $path
done
popd >/dev/null
rm -rf $DB
else
DATABASE_COLLECTIONS=$(mongo $CONN $ARGS --quiet --eval 'db.getCollectionNames()' | sed 's/,/ /g')
mkdir /tmp/$DB
pushd /tmp/$DB 2>/dev/null
for collection in $DATABASE_COLLECTIONS; do
mongoexport --host $HOST -u $USERNAME -p $PASSWORD -db $DB -c $collection --jsonArray -o $collection.json >/dev/null
done
pushd /tmp 2>/dev/null
tar -czf "$DB.tar.gz" $DB 2>/dev/null
popd 2>/dev/null
popd 2>/dev/null
mv /tmp/$DB.tar.gz ./ 2>/dev/null
rm -rf /tmp/$DB 2>/dev/null
fi
load=false
用法()
{
cat/dev/null
对于*.json;do中的路径
集合=${path%.json}
echo“从$path加载到$DB/$collection”
mongoimport$ARGS-d$DB-c$collection$path
完成
popd>/dev/null
rm-rf$DB
其他的
数据库_COLLECTIONS=$(mongo$CONN$ARGS--quiet--eval'db.getCollectionNames()'| sed's/,//g')
mkdir/tmp/$DB
pushd/tmp/$DB 2>/dev/null
对于$DATABASE_集合中的集合;执行以下操作
mongoexport--host$host-u$USERNAME-p$PASSWORD-db$db-c$collection--jsonArray-o$collection.json>/dev/null
完成
pushd/tmp 2>/dev/null
tar-czf“$DB.tar.gz”$DB 2>/dev/null
popd 2>/dev/null
popd 2>/dev/null
mv/tmp/$DB.tar.gz./2>/dev/null
rm-rf/tmp/$DB 2>/dev/null
fi
如果需要,可以将所有集合导出到csv,而无需指定--字段(将导出所有字段)
从中运行此bash脚本
OIFS=$IFS;
IFS=“,”;
#请在这里填写您的详细信息
dbname=dbname
用户=用户名
pass=密码
主机名:端口
#首先获取数据库中的所有集合
collections=`mongo“$host/$dbname”-u$user-p$pass--eval“rs.slaveOk();db.getCollectionNames();”;
collections=`mongo$dbname--eval“rs.slaveOk();db.getCollectionNames();”;
collectionArray=($collections);
#对于每个集合
对于((i=0;i我在尝试了大量复杂的示例后发现,非常简单的方法对我有效
我只是想从本地转储一个db,然后将其导入远程实例:
在本地计算机上:
mongodump -d databasename
然后我将我的转储scp到我的服务器计算机:
scp -r dump user@xx.xxx.xxx.xxx:~
然后从转储的父目录简单地执行以下操作:
mongorestore
这就导入了数据库
dburl=$1
username=$3
password=$4
db=$2
mongoAccess=mongodb+srv://$username:$password@$dburl/$db
Collections=$(mongo $mongoAccess --quiet --eval "db.getCollectionNames()" | sed 's/,/ /g' | tail +6)
#echo $Collections
for col in $Collections
do
if [ "$col" = "[" ] || [ "$col" = "]" ]
then
continue
else
echo "Exporting $col"
mongoexport --uri $mongoAccess --collection=$col --type json --out output-$col.json
fi
done
当然,假设mongodb服务正在运行。如果要备份服务器上的所有数据库,而不必担心会调用这些数据库,请使用以下shell脚本:
#!/bin/sh
md=`which mongodump`
pidof=`which pidof`
mdi=`$pidof mongod`
dir='/var/backup/mongo'
if [ ! -z "$mdi" ]
then
if [ ! -d "$dir" ]
then
mkdir -p $dir
fi
$md --out $dir >/dev/null 2>&1
fi
这将使用mongodump实用程序,如果未指定任何数据库,它将备份所有数据库
您可以将其放在cronjob中,它只在mongod进程运行时运行。如果不存在备份目录,它还将创建备份目录
每个数据库备份都写入一个单独的目录,因此您可以从全局转储恢复单个数据库
打开连接
启动服务器
打开新命令提示符
出口:
mongo/bin>mongoexport-d webmitta-c domain-o domain-k.json
进口:
mongoimport-d dbname-c newcolleconName--file domain-k.json
在哪里
webmitta(db name)
domain(Collection Name)
domain-k.json(output file name)
如果您想转储所有数据库中的所有集合(这是对原始提问者意图的扩展性解释),那么使用
所有数据库和集合将在“当前”位置名为“dump”的目录中创建请告诉我们您在哪里安装了Mongo DB?(在Ubuntu或Windows中)
- 适用于Windows:
- 导出之前,必须在cmd提示符下连接到Mongo DB,并确保能够连接到本地主机
- 现在打开一个新的cmd提示符并执行下面的命令
mongodump--db数据库名称--out保存路径
例如:mongodump--db mydb--out c:\TEMP\op.json
- 更多详情请访问
- 对于Ubuntu:
- 登录到安装了Mongo DB的终端,确保能够连接到Mongo DB
- 现在打开一个新终端并执行以下命令
mongodump-d数据库名-o要保存的文件名
例如:mongodump-d mydb-o output.json
- 更多详情请访问
如果您想连接mongoDB.com这样的远程mongoDB服务器,您应该传递连接凭据
例如
使用mongodump导出所有集合时,请使用以下命令
mongodump-d数据库\u名称-o目录\u到\u存储\u转储
要恢复,请使用此命令
mongorestore -d database_name directory_backup_where_mongodb_tobe_restored
以下是恢复导出数据库时对我有效的方法:
mongorestore-d0./0——删除
其中./包含导出的bson文件。请注意,--drop
将覆盖exi
mongoexport -h id.mongolab.com:60599 -u username -p password -d mydb -c mycollection -o mybackup.json
mongorestore -d database_name directory_backup_where_mongodb_tobe_restored
mongo --quiet mydatabase --eval "db.getCollectionNames().join('\n')" | \
grep -v system.indexes | \
xargs -L 1 -I {} mongoexport -d mydatabase -c {} --out {}.json
mongodump --host xx.xxx.xx.xx --port 27017 --db your_db_name --username your_user_name --password your_password --out /target/folder/path
Window filepath=C:\Users\Username\mongo
mongodump --archive={filepath}\+{filename}.gz --gzip --db {dbname}
1. mongodump -d dbname -o dumpname -u username -p password
2. scp -r user@remote:~/location/of/dumpname ./
3. mongorestore -d dbname dumpname/dbname/ -u username -p password
#mongodump using sh script
#!/bin/bash
TIMESTAMP=`date +%F-%H%M`
APP_NAME="folder_name"
BACKUPS_DIR="/xxxx/tst_file_bcup/$APP_NAME"
BACKUP_NAME="$APP_NAME-$TIMESTAMP"
/usr/bin/mongodump -h 127.0.0.1 -d <dbname> -o $BACKUPS_DIR/$APP_NAME/$BACKUP_NAME
tar -zcvf $BACKUPS_DIR/$BACKUP_NAME.tgz $BACKUPS_DIR/$APP_NAME/$BACKUP_NAME
rm -rf /home/wowza_analytics_bcup/wowza_analytics/wowza_analytics
### 7 days old backup delete automaticaly using given command
find /home/wowza_analytics_bcup/wowza_analytics/ -mindepth 1 -mtime +7 -delete
mongodump -d <your d name> -o <dump path>
Ex:mongodump -d qualetics -o D:\dbpackup\qualetics
mongodump --host localhost --port 27017 --db db_name --out db_path
mongodump --uri="mongodb://YOUR_USER_ID:YOUR_PASSWORD@YOUR_HOST_IP/YOUR_DB_NAME" --gzip --archive > YOUR_FILE_NAME
mongorestore --uri="mongodb://$targetUser:$targetPwd@$targetHost/$targetDb" --nsFrom="$sourceDb.*" --nsTo="$targetDb.*" --gzip --archive
mongodump --archive="my-local-db" --db=my
mongorestore --archive="my-local-db" --nsFrom='my.*' --nsTo='mynew.*'
dburl=$1
username=$3
password=$4
db=$2
mongoAccess=mongodb+srv://$username:$password@$dburl/$db
Collections=$(mongo $mongoAccess --quiet --eval "db.getCollectionNames()" | sed 's/,/ /g' | tail +6)
#echo $Collections
for col in $Collections
do
if [ "$col" = "[" ] || [ "$col" = "]" ]
then
continue
else
echo "Exporting $col"
mongoexport --uri $mongoAccess --collection=$col --type json --out output-$col.json
fi
done