Como exportar todas as coleções no MongoDB?


320

Desejo exportar todas as coleções no MongoDB pelo comando:

mongoexport -d dbname -o Mongo.json

O resultado é:
Nenhuma coleção especificada!

O manual diz que, se você não especificar uma coleção, todas as coleções serão exportadas.
No entanto, por que isso não funciona?

http://docs.mongodb.org/manual/reference/mongoexport/#cmdoption-mongoexport--collection

Minha versão do MongoDB é 2.0.6.


2
Qual versão do MongoDB você está usando? A documentação wiki do mongoexport sugere que esta é uma ferramenta de linha de comando para exportar uma coleção. Talvez a capacidade de exportar várias coleções seja para uma versão mais recente? Se você deseja fazer backup de todas as coleções em um banco de dados, o mongodump exportará todas as coleções para o BSON.
Stennie

1
Parece que a opção de usar o mongoexport para todas as coleções é um recurso planejado que ainda não foi agendado: SERVER-201 .. então o mongodump é atualmente a melhor opção para exportar um banco de dados completo. Não seria muito difícil escrever o equivalente a mongoexport usando um dos drivers do cliente MongoDB .
Stennie

2
Você deve marcar uma resposta como aceita. Meu voto é para stackoverflow.com/a/16605781/1686575
John Manko

Para o registro, a documentação do MongoDB indica Evite usar mongoimport e mongoexport para backups de produção de instância completa. Eles não preservam de forma confiável todos os tipos de dados ricos em BSON, porque o JSON pode representar apenas um subconjunto dos tipos suportados pelo BSON. Use mongodump e mongorestore, conforme descrito em Métodos de backup do MongoDB para esse tipo de funcionalidade. Portanto, não é apenas para pessoas preguiçosas, como afirma Mentor Reka, mas também é o método preferido para fazer isso.
samurai_jane

Respostas:


687

Para pessoas preguiçosas, use mongodump, é mais rápido:

mongodump -d <database_name> -o <directory_backup>

E para "restaurá-lo / importá-lo" (em directory_backup / dump /):

mongorestore -d <database_name> <directory_backup>

Dessa forma, você não precisa lidar com todas as coleções individualmente. Basta especificar o banco de dados.

Observe que eu recomendaria não usar mongodump/ mongorestorepara armazenamentos de big data . É muito lento e depois de passar 10 / 20GB de dados, pode demorar horas para restaurar.


2
Não há um problema de compatibilidade entre JSON e BSON?
precisa saber é o seguinte

5
O formato de dados usado pelo mongodump da versão 2.2 ou posterior é incompatível com as versões anteriores do mongod. Não use versões recentes do mongodump para fazer backup de armazenamentos de dados mais antigos.
N0nSmoker

4
Eu acreditava que o comando restore é "mongorestore -b DATABASE ./dump-folder" (onde ./dump-folder é o caminho ou os dados exportados).
Thomas Decaux 12/02

47
"mongorestore -d DATABASE ./dump-folder"
kehers 13/03

2
@LucaSteeb use --excludeCollection = sessions
Zim

60

Eu escrevi o script bash para isso. Basta executá-lo com 2 parâmetros (nome do banco de dados, dir para armazenar arquivos).

#!/bin/bash

if [ ! $1 ]; then
        echo " Example of use: $0 database_name [dir_to_store]"
        exit 1
fi
db=$1
out_dir=$2
if [ ! $out_dir ]; then
        out_dir="./"
else
        mkdir -p $out_dir
fi

tmp_file="fadlfhsdofheinwvw.js"
echo "print('_ ' + db.getCollectionNames())" > $tmp_file
cols=`mongo $db $tmp_file | grep '_' | awk '{print $2}' | tr ',' ' '`
for c in $cols
do
    mongoexport -d $db -c $c -o "$out_dir/exp_${db}_${c}.json"
done
rm $tmp_file

1
Para importar: for file in *.json; do c=${file#*exp_yourdbname_}; c=${c%.json}; mongoimport --db yourdbname --collection "${c}" --file "${file}"; done
Bradford

Eu quero importar .csv usando script em lote, você tem alguma idéia?
Prasanth Jaya

29

Siga as etapas abaixo para criar um mongodump a partir do servidor e importá-lo para outro servidor / máquina local que tenha um nome de usuário e uma senha

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

27

Exportando todas as coleções usando mongodump, use o seguinte comando

mongodump -d database_name -o directory_to_store_dumps

Para restaurar, use este comando

mongorestore -d database_name directory_backup_where_mongodb_tobe_restored

Eu fiz mongodump -d mongo -o path\to\Desktop\bloge recebo um SyntaxError: missing ; before statementdo CMD. :(
Razvan Zamfir

18

Informe-nos onde você instalou o seu Mongo DB? (no Ubuntu ou no Windows)

  • Para Windows:

    1. Antes de exportar, você deve se conectar ao seu Mongo DB no prompt do cmd e verifique se é capaz de se conectar ao seu host local.
    2. Agora abra um novo prompt de cmd e execute o comando abaixo,

    mongodump - nome do banco de dados db - caminho a ser salvo,
    por exemplo: mongodump - db mydb -, saída c: \ TEMP \ op.json

    1. Visite https://www.youtube.com/watch?v=hOCp3Jv6yKo para obter mais detalhes.
  • Para o Ubuntu:

    1. Entre no seu terminal onde o Mongo DB está instalado e verifique se você consegue se conectar ao Mongo DB.
    2. Agora abra um novo terminal e execute o comando abaixo,

    mongodump -d nome do banco de dados -o nome do arquivo a ser salvo,
    por exemplo: mongodump -d mydb -o output.json

    1. Visite https://www.youtube.com/watch?v=5Fwd2ZB86gg para obter mais detalhes.

12

As respostas anteriores explicaram bem, estou adicionando minha resposta para ajudar caso você esteja lidando com um banco de dados remoto protegido por senha

mongodump --host xx.xxx.xx.xx --port 27017 --db your_db_name --username your_user_name --password your_password --out /target/folder/path

10

Caso deseje conectar um servidor mongoDB remoto como mongolab.com, você deve passar credenciais de conexão, por exemplo.

mongoexport -h id.mongolab.com:60599 -u username -p password -d mydb -c mycollection -o mybackup.json

2
Esta solução é a melhor porque responde adequadamente à pergunta original.
ttemple

Observe que isso não preserva de maneira confiável todos os tipos de dados BSON avançados, porque o JSON pode representar apenas um subconjunto dos tipos suportados pelo BSON. Use mongodump e mongorestore, conforme descrito em Métodos de backup do MongoDB para esse tipo de funcionalidade. ( docs )
Z. Khullah 16/11

8

Se você estiver bem com o formato bson, poderá usar o utilitário mongodump com o mesmo sinalizador -d. Ele irá despejar todas as coleções no diretório de despejo (o padrão, pode ser alterado através da opção -o) no formato bson. Você pode importar esses arquivos usando o utilitário mongorestore.


8

Você pode usar mongo --eval 'printjson(db.getCollectionNames())'para obter a lista de coleções e, em seguida, fazer uma exportação mongo em todas elas. Aqui está um exemplo em 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

Isso é legal, mas você provavelmente gostaria que o regex out.scan não fosse ganancioso. out.scan(/\".+?\"/).map { |s| s.gsub('"', '') }
quer

8

Eu precisava da versão de script em lote do Windows. Esse tópico foi útil, então pensei em contribuir com minha resposta também.

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

Eu tive alguns problemas usando set /p COLLECTIONS=<__collections.txt, daí o for /fmétodo complicado .


8

Depois de tentar muitos exemplos complicados, descobri que uma abordagem muito simples funcionou para mim.

Eu só queria pegar um db de um db do local e importá-lo em uma instância remota:

na máquina local:

mongodump -d databasename

então scp'd meu despejo na minha máquina servidor:

scp -r dump user@xx.xxx.xxx.xxx:~

então, a partir do diretório pai do despejo, simplesmente:

mongorestore 

e que importou o banco de dados.

assumindo que o serviço mongodb esteja sendo executado, é claro.


7

Se desejar, você pode exportar todas as coleções para csv sem especificar --fields(exportará todos os campos).

Em http://drzon.net/export-mongodb-collections-to-csv-without-specifying-fields/, execute este script bash

OIFS=$IFS;
IFS=",";

# fill in your details here
dbname=DBNAME
user=USERNAME
pass=PASSWORD
host=HOSTNAME:PORT

# first get all collections in the database
collections=`mongo "$host/$dbname" -u $user -p $pass --eval "rs.slaveOk();db.getCollectionNames();"`;
collections=`mongo $dbname --eval "rs.slaveOk();db.getCollectionNames();"`;
collectionArray=($collections);

# for each collection
for ((i=0; i<${#collectionArray[@]}; ++i));
do
    echo 'exporting collection' ${collectionArray[$i]}
    # get comma separated list of keys. do this by peeking into the first document in the collection and get his set of keys
    keys=`mongo "$host/$dbname" -u $user -p $pass --eval "rs.slaveOk();var keys = []; for(var key in db.${collectionArray[$i]}.find().sort({_id: -1}).limit(1)[0]) { keys.push(key); }; keys;" --quiet`;
    # now use mongoexport with the set of keys to export the collection to csv
    mongoexport --host $host -u $user -p $pass -d $dbname -c ${collectionArray[$i]} --fields "$keys" --csv --out $dbname.${collectionArray[$i]}.csv;
done

IFS=$OIFS;

7

Você pode fazer isso usando o comando mongodump

Etapa 1: abrir o prompt de comando

Etapa 2: vá para a pasta bin da sua instalação do mongoDB (C: \ Arquivos de Programas \ MongoDB \ Server \ 4.0 \ bin)

Etapa 3: em seguida, execute o seguinte comando

mongodump -d your_db_name -o destination_path

your_db_name = test

destination_path = C: \ Usuários \ HP \ Desktop

Os arquivos exportados serão criados na pasta destination_path \ your_db_name (neste exemplo, C: \ Users \ HP \ Desktop \ test)

Referências: o7planning


6

Se você deseja despejar todas as coleções em todos os bancos de dados (que é uma interpretação abrangente da intenção do questionador original), use

mongodump

Todos os bancos de dados e coleções serão criados em um diretório chamado 'dump' no local 'atual'


5

Sei que essa é uma pergunta bastante antiga e que o mongodump / mongorestore é claramente o caminho certo se você deseja um resultado 100% fiel, incluindo índices.

No entanto, eu precisava de uma solução rápida e suja que provavelmente seria compatível com versões anteriores e anteriores entre as versões antiga e nova do MongoDB, desde que não haja nada de especialmente estranho. E por isso eu queria a resposta para a pergunta original.

Existem outras soluções aceitáveis ​​acima, mas esse pipeline Unix é relativamente curto e agradável:

mongo --quiet mydatabase --eval "db.getCollectionNames().join('\n')" | \
grep -v system.indexes | \
xargs -L 1 -I {} mongoexport -d mydatabase -c {} --out {}.json

Isso produz um .jsonarquivo com nome apropriado para cada coleção.

Observe que o nome do banco de dados ("mydatabase") aparece duas vezes. Estou assumindo que o banco de dados é local e você não precisa passar credenciais, mas é fácil fazer isso com ambos mongoe mongoexport.

Observe que estou usando o grep -vdescarte system.indexes, porque não quero que uma versão mais antiga do MongoDB tente interpretar uma coleção de sistemas de uma mais nova. Em vez disso, estou permitindo que meu aplicativo faça suas ensureIndexchamadas habituais para recriar os índices.


5

você pode criar um arquivo zip usando o seguinte comando. Ele criará um arquivo zip do banco de dados {dbname} fornecido. Você pode importar posteriormente o seguinte arquivo zip no seu mongo DB.

Window filepath=C:\Users\Username\mongo 

mongodump --archive={filepath}\+{filename}.gz --gzip --db {dbname}

para mais uso clareza seguinte informação docs.mongodb.com/manual/reference/program/mongodump
kumar31rajesh

3

Aqui está o que funcionou para mim ao restaurar um banco de dados exportado:

mongorestore -d 0 ./0 --drop

onde ./ continha os arquivos bson exportados. Observe que --dropele substituirá os dados existentes.


3

se você deseja usar mongoexport e mongoimport para exportar / importar cada coleção do banco de dados, acho que esse utilitário pode ser útil para você. Eu usei utilidades semelhantes algumas vezes;

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

2

Se você deseja fazer backup de todos os dbs no servidor, sem ter a preocupação de que os dbs sejam chamados, use o seguinte script de 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

Isso usa o utilitário mongodump, que fará backup de todos os bancos de dados se nenhum for especificado.

Você pode colocar isso no seu cronjob, e ele será executado apenas se o processo mongod estiver em execução. Ele também criará o diretório de backup, se não houver nenhum.

Cada backup do banco de dados é gravado em um diretório individual, para que você possa restaurar bancos de dados individuais do dump global.


2

Primeiro, inicie o Mongo DB - para isso, vá para o caminho como ->

C: \ Arquivos de programas \ MongoDB \ Server \ 3.2 \ bin e clique no arquivo mongod.exe para iniciar o servidor MongoDB.

Comando no Windows para Exportar

  • Comando para exportar o banco de dados MongoDB no Windows do "servidor remoto" para a máquina local no diretório C: / Users / Desktop / temp-folder do servidor remoto com o endereço IP e a porta internos.

C:> mongodump --host remote_ip_address: 27017 --db -o C: / Usuários / Desktop / pasta-temp

Comando no Windows para Importar

  • Comando para importar o banco de dados MongoDB no Windows para "servidor remoto" do diretório C da máquina local: / Users / Desktop / temp-folder / db-dir

C:> mongorestore --host = ip --port = 27017 -d C: / Usuários / Desktop / pasta temporária / db-dir


1
#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

0
  1. Abra a conexão
  2. Iniciar o servidor
  3. abrir novo prompt de comando

Exportar:

mongo/bin> mongoexport -d webmitta -c domain -o domain-k.json

Importar:

mongoimport -d dbname -c newCollecionname --file domain-k.json

Onde

webmitta(db name)
domain(Collection Name)
domain-k.json(output file name)

É mongoexport para exportação
Cyril Duchon-Doris

5
A questão é exportar todas as coleções.
JJJ

0

Existem várias opções, dependendo do que você deseja fazer

1) Se você deseja exportar seu banco de dados para outro banco de dados mongo, use mongodump. Isso cria uma pasta de arquivos BSON que possuem metadados que o JSON não teria.

mongodump
mongorestore --host mongodb1.example.net --port 37017 dump/

2) Se você deseja exportar seu banco de dados para JSON, pode usar, mongoexportexceto que você deve fazer uma coleção por vez (isso é por design). No entanto, acho mais fácil exportar todo o banco de dados mongodumpe depois converter para JSON.

# -d is a valid option for both mongorestore and mongodump

mongodump -d <DATABASE_NAME>
for file in dump/*/*.bson; do bsondump $file > $file.json; done

0

Para despejo, seu DB coloca o CMD abaixo

   mongodump -d <your d name> -o <dump path>
Ex:mongodump -d qualetics -o D:\dbpackup\qualetics

-3

Para exportar no formato JSON, faça isso seguindo os comandos que você pode ver.

mongoexport --db dbname --collection collectionName --out directoryPATH/JSONfileName.json
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.