Как экспортировать все коллекции в 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)
Для Ubuntu:
- Войдите в свой терминал, где установлен Mongo DB, и убедитесь, что вы можете подключиться к своей Mongo DB.
- Теперь откройте новый терминал и выполните следующую команду:
имя базы данных mongodump -d -o имя файла для сохранения
например: mongodump -d mydb -o output.json
- Подробнее см. 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