如何导出MongoDB中的所有集合?

如何导出MongoDB中的所有集合?,mongodb,export,Mongodb,Export,我想通过以下命令导出MongoDB中的所有集合: mongoexport -d dbname -o Mongo.json 结果是: 没有指定集合 手册上说,如果不指定集合,将导出所有集合。 然而,为什么这不起作用 我的MongoDB版本是2.0.6。如果您对bson格式满意,那么您可以使用具有相同-d标志的mongodump实用程序。它将以bson格式将所有集合转储到转储目录(默认情况下,可以通过-o选项更改)。然后可以使用mongorestore实用程序导入这些文件。我为此编写了bash脚

我想通过以下命令导出MongoDB中的所有集合:

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