Как экспортировать все коллекции в MongoDB?

Я хочу экспортировать все коллекции в MongoDB командой:

mongoexport -d dbname -o Mongo.json

Результат:
Коллекция не указана!

В руководстве говорится, что если вы не укажете коллекцию, все коллекции будут экспортированы.
Однако почему это не работает?

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

Моя версия MongoDB - 2.0.6.

Ответ 1

Для ленивых людей используйте mongodump, это быстрее:

mongodump -d <database_name> -o <directory_backup>

И "восстановить/импортировать" его (из directory_backup/dump/):

mongorestore -d <database_name> <directory_backup>

Таким образом, вам не нужно иметь дело со всеми коллекциями индивидуально. Просто укажите базу данных.

Обратите внимание, что я бы рекомендовал не использовать mongodump/mongorestore для больших хранилищ данных. Это очень медленно, и как только вы получите 10/20 ГБ данных, восстановление может занять несколько часов.

Ответ 2

Я написал для этого bash script. Просто запустите его с двумя параметрами (имя базы данных, каталог для хранения файлов).

#!/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

Ответ 3

Выполните следующие шаги, чтобы создать mongodump с сервера и импортировать его на другой сервер/локальный компьютер с именем пользователя и паролем

1. mongodump -d dbname -o dumpname -u username -p password
2. scp -r [email protected]:~/location/of/dumpname ./
3. mongorestore -d dbname dumpname/dbname/ -u username -p password

Ответ 4

При экспорте всех коллекций с помощью mongodump используйте следующую команду

mongodump -d database_name -o directory_to_store_dumps

Чтобы восстановить эту команду

mongorestore -d database_name directory_backup_where_mongodb_tobe_restored

Ответ 5

Пожалуйста, сообщите нам, где вы установили свою Mongo DB? (либо в Ubuntu, либо в Windows)

  • Для Windows:

    • Перед экспортом вы должны подключиться к своей Mongo DB в командной строке cmd и убедиться, что вы можете подключиться к локальному хосту.
    • Теперь откройте новую подсказку cmd и выполните следующую команду:

    имя базы данных mongodump --db - путь к сохранению
    например: mongodump --db mydb --out c:\TEMP\op.json

    1. Для более подробной информации посетите https://www.youtube.com/watch?v=hOCp3Jv6yKo.

Для Ubuntu:

  • Войдите в свой терминал, где установлен Mongo DB, и убедитесь, что вы можете подключиться к своей Mongo DB.
  • Теперь откройте новый терминал и выполните следующую команду:

имя базы данных mongodump -d -o имя файла для сохранения
например: mongodump -d mydb -o output.json

  1. Подробнее см. https://www.youtube.com/watch?v=5Fwd2ZB86gg.

Ответ 6

Если вы в порядке с форматом bson, тогда вы можете использовать утилиту mongodump с тем же флагом -d. Он сбрасывает все коллекции в каталог дампа (по умолчанию, может быть изменен с помощью опции -o) в формате bson. Затем вы можете импортировать эти файлы с помощью утилиты mongorestore.

Ответ 7

Вы можете использовать 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

Ответ 8

Мне понадобилась версия для Windows script. Эта тема была полезна, поэтому я думал, что внес свой ответ и на нее.

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=<__collections.txt, следовательно, из-за запутанного метода for /f.

Ответ 9

Если вы хотите подключить удаленный сервер mongoDB, например mongolab.com, вы должны передать учетные данные, например.

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

Ответ 10

Предыдущие ответы объяснили это хорошо, я добавляю свой ответ, чтобы помочь в случае, если вы имеете дело с удаленной защищенной паролем базой данных

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

Ответ 11

Если вы хотите, вы можете экспортировать все коллекции в csv без указания --fields (экспортирует все поля).

Из http://drzon.net/export-mongodb-collections-to-csv-without-specifying-fields/ запустите этот bash script

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;

Ответ 12

Я обнаружил, что, попробовав множество запутанных примеров, для меня очень простой подход.

Я просто хотел взять дамп db из локального и импортировать его на удаленный экземпляр:

на локальной машине:

mongodump -d databasename

то я scp'd мой дамп на свой сервер:

scp -r dump [email protected]:~

то из родительского каталога дампа просто:

mongorestore 

и импортирует базу данных.

Предполагая, что обслуживание mongodb работает, конечно.

Ответ 13

Если вы хотите сбросить все коллекции во всех базах данных (что является экспансивной интерпретацией первоначального намерения пользователя), используйте

mongodump

Все базы данных и коллекции будут созданы в каталоге с именем 'dump' в текущем местоположении

Ответ 14

вы можете создать zip файл, используя следующую команду. Он создаст zip файл с базой данных {dbname}. После этого вы можете импортировать следующий zip файл в вашу mongo DB.

Window filepath=C:\Users\Username\mongo 

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

Ответ 15

если вы хотите использовать 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

Ответ 16

Вот что сработало для меня при восстановлении экспортируемой базы данных:

mongorestore -d 0 ./0 --drop

где./сохранены экспортированные файлы bson. Обратите внимание, что --drop будет перезаписывать существующие данные.

Ответ 17

Я понимаю, что это довольно старый вопрос и что mongodump/mongorestore - это, безусловно, правильный путь, если вы хотите получить 100% верный результат, включая индексы.

Однако мне понадобилось быстрое и грязное решение, которое, скорее всего, было бы передовым и обратным, совместимым между старыми и новыми версиями MongoDB, при условии, что ничего особенно странного не происходит. И для этого я хотел ответить на исходный вопрос.

Существуют другие приемлемые решения выше, но этот конвейер Unix относительно короткий и сладкий:

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

Это создает соответствующий файл .json для каждой коллекции.

Обратите внимание, что имя базы данных ( "mydatabase" ) появляется дважды. Я предполагаю, что база данных является локальной, и вам не нужно передавать учетные данные, но это легко сделать с помощью mongo и mongoexport.

Обратите внимание, что я использую grep -v для отбрасывания system.indexes, потому что я не хочу, чтобы более старая версия MongoDB пыталась интерпретировать системную коллекцию из более новой. Вместо этого я разрешаю моему приложению выполнять обычные вызовы ensureIndex для воссоздания индексов.

Ответ 18

Если вы хотите сделать резервную копию всех dbs на сервере, не беспокоясь о том, что вызывается dbs, используйте следующую оболочку script:

#!/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. Он также создаст каталог резервного копирования, если он не существует.

Каждая резервная копия БД записывается в отдельный каталог, поэтому вы можете восстановить отдельные БД из глобального дампа.

Ответ 19

Уже вы можете делать подобные операции с помощью графического интерфейса, такого как Robomongo или Mongochef.

Ответ 20

#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

Ответ 21

Во-первых, из Start the Mongo DB - для этого перейдите по пути как ->

C:\Program Files\MongoDB\Server\3.2\bin и щелкните файл mongod.exe, чтобы запустить сервер MongoDB.

Команда в Windows для экспорта

  • Команда для экспорта базы данных MongoDB в Windows с "удаленного сервера" на локальный компьютер в каталоге C: /Users/Desktop/temp-folder с удаленного сервера с внутренним IP-адресом и портом.

C:> mongodump --host remote_ip_address: 27017 --db -o C: /Users/Desktop/temp-folder

Команда в Windows для импорта

  • Команда для импорта базы данных MongoDB в Windows на "удаленный сервер" из каталога локального компьютера C: /Users/Desktop/temp-folder/db -d ir

C:> mongorestore --host = ip --port = 27017 -d C: /Users/Рабочий стол /temp-folder/db -d ir

Ответ 22

  • Откройте соединение
  • Запустите сервер
  • открыть новое командное приглашение

Экспорт

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

Импорт

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

Где

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

Ответ 23

Есть несколько вариантов в зависимости от того, что вы хотите сделать

1) Если вы хотите экспортировать вашу базу данных в другую базу данных mongo, вы должны использовать mongodump. Это создает папку файлов BSON с метаданными, которых не было бы в JSON.

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

2) Если вы хотите экспортировать свою базу данных в JSON, вы можете использовать mongoexport за исключением того, что вы должны делать это по одной коллекции за раз (это специально). Однако я думаю, что проще всего экспортировать всю базу данных с помощью mongodump а затем конвертировать в 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

Ответ 24

Для дампа, ваша БД должна следовать ниже CMD

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

Ответ 25

Вы можете сделать это с помощью команды mongodump

Шаг 1. Откройте командную строку

Шаг 2: перейдите в папку bin вашей установки mongoDB (C:\Program Files\MongoDB\Server\4.0\bin)

Шаг 3: затем выполните следующую команду

mongodump -d your_db_name -o destination_path

your_db_name = test

destination_path = C:\Users\HP\Desktop

Экспортированные файлы будут созданы в папке destination_path\your_db_name (в этом примере C:\Users\HP\Desktop\test)

Рекомендации: o7planning

Ответ 26

Для экспорта в формате JSON сделайте это, следуя командам, которые вы можете видеть.

mongoexport --db dbname --collection collectionName --out directoryPATH/JSONfileName.json