MongoDB export — процесс выгрузки информации из базы в файл с возможность повторной загрузки из него. На том же сервере или на любом другом. Для этого могут использоваться инструменты mongoexport (mongoimport) и mongodump (mongorestore).
Последние значительно лучше поскольку сохраняют данные в формате BSON, именно с ним работает MongoDB. mongoimport / mongoexport сохраняют в JSON — он практически идентичен, но не полностью из-за чего возможны некоторые непредвиденные ситуации. ниже рассмотрены все инструментами для работы с дампами.
mongodb export: инструменты для создания дампа
Установим пакет на сервер с Ubuntu 16, затем создадим тестовую базу, collection и на их примере рассмотрим способы создания дампа.
apt-get isntall mongodb
Заходим в оболочку MongoDB
mongo
MongoDB shell version: 2.6.10
connecting to: test
Welcome to the MongoDB shell.
For interactive help, type «help».
For more comprehensive documentation, see
http://docs.mongodb.org/
Questions? Try the support group
http://groups.google.com/group/mongodb-user
show dbs
admin (empty)
local 0.078GB
По умолчнию есть 2 базы, создаем новую firstdb
use firstdb
switched to db firstdb
Увидеть ее можно будет только после добавления Collection
show dbs
admin (empty)
local 0.078GB
Это аналог таблицы в реляционных базах данных
db.createCollection(«firstone»)
{ «ok» : 1 }
show dbs
admin (empty)
firstdb 0.078GB
local 0.078GB
Теперь нужно поместить в базу какие-то данные. Все они создаются в виде JS объектов, которые зтем сохраняются в Collection выбранной базы
someobject = {value: «test», index: «1»};
{ «value» : «test», «index» : «1» }
Сохранение выполняется так
db.firstone.save(someobject)
WriteResult({ «nInserted» : 1 })
Т.е. db.COLLECTION_NAME.save(RECORD_NAME), важно при этом использовать именно ту базу, в которой сохраняются данные
Выходим из шел MongoDB CTRL + C
bye
Утилиты mongoexport и mongoimport
Отличительная особенность — данные сохраняются в формате JSON
mongoexport -d firstdb -c firstone -o firstone.json
connected to: 127.0.0.1
exported 1 records
Так выглядит результат:
mcedit firstone.json
{ «_id» : { «$oid» : «5b0959d1d83dd6a998d72750» }, «value» : «test», «index» : «1» }
Поменяем индекс на 2 чтобы отследить, что измененный дамп успешно загрузится в дальнейшем
Теперь снова зайдем в шел и удалим базу
mongo
db.dropDatabase()
{ «dropped» : «firstdb», «ok» : 1 }
Запрашиваем содержимое Collection firstone
db.firstone.find()
Команда вернет пустой результат
Снова создаем базу и Collection
use firstdb
db.createCollection(«firstone»)
{ «ok» : 1 }
Покидаем шел CTRL + C
bye
Теперь в созданную структуру можно загрузить данные из файла
mongoimport -d firstdb -c firstone firstone.json
connected to: 127.0.0.1
2018-05-26T13:07:19.760+0000 imported 1 objects
mongo
db.firstone.find()
{ «_id» : ObjectId(«5b0959d1d83dd6a998d72750»), «value» : «test», «index» : «2» }
Информация снов в базе, индекс при этом равен двум
MongoDB export и утилита mongodump
Эти инструменты более совершенны, поскольку работают с BSON. Они наиболее деликатно экспортируют и импортируют данные.
Создаем отдельный каталог и переходим в него
mkdir dump && cd dump/
При выгрузке дампа указывается имя базы
mongodump —db firstdb
connected to: 127.0.0.1
2018-05-26T13:09:10.012+0000 DATABASE: firstdb to dump/firstdb
2018-05-26T13:09:10.013+0000 firstdb.system.indexes to dump/firstdb/system.indexes.bson
2018-05-26T13:09:10.013+0000 1 documents
2018-05-26T13:09:10.013+0000 firstdb.firstone to dump/firstdb/firstone.bson
2018-05-26T13:09:10.014+0000 1 documents
2018-05-26T13:09:10.014+0000 Metadata for firstdb.firstone to dump/firstdb/firstone.metadata.json
На выходе имеем 20 файлов, основной из них firstone.bson
~/dump# ls -la dump/firstdb/
total 20
drwxr-xr-x 2 root root 4096 май 26 13:09 .
drwxr-xr-x 3 root root 4096 май 26 13:09 ..
-rw-r—r— 1 root root 51 май 26 13:09 firstone.bson
-rw-r—r— 1 root root 98 май 26 13:09 firstone.metadata.json
-rw-r—r— 1 root root 71 май 26 13:09 system.indexes.bson
Снова удаляем базу
mongo
MongoDB shell version: 2.6.10
connecting to: test
use firstdb
switched to db firstdb
db.dropDatabase()
{ «dropped» : «firstdb», «ok» : 1 }
^C
bye
Находясь в каталоге с дампом запускаем загрузку mongorestore
mongorestore
connected to: 127.0.0.1
2018-05-26T13:11:40.961+0000 dump/firstdb/firstone.bson
2018-05-26T13:11:40.961+0000 going into namespace [firstdb.firstone]
1 objects found
2018-05-26T13:11:40.962+0000 Creating index: { key: { _id: 1 }, name: «_id_», ns: «firstdb.firstone» }
mongo
MongoDB shell version: 2.6.10
connecting to: test
use firstdb
switched to db firstdb
db.firstone.find()
{ «_id» : ObjectId(«5b0959d1d83dd6a998d72750»), «value» : «test», «index» : «2» }
Восстановление выполнено успешно, для mongorestore не понадобилось воссоздавать структуру базы. Этот инструмент использовать для экспортирования лучше всего.
Читайте статью про Collections и базы данных в MongoDB