Автор выбрал COVID-19 Relief Fund для получения пожертвования в рамках программы Write for DOnations.
MongoDB — одна из самых популярных СУБД NoSQL. Она отличается масштабируемостью, мощностью и надежностью и удобством в использовании. В этом учебном модуле мы покажем, как импортировать и экспортировать ваши базы данных MongoDB.
Следует отметить, что под импортом и экспортом мы подразумеваем операции с данными в удобном для чтения формате, совместимом с другими программными продуктами. В отличие от импорта и экспорта, операции резервного копирования и восстановления используют специальные двоичные данные MongoDB, обеспечивающие согласованность и целостность данных и сохраняющие специальные атрибуты MongoDB. Таким образом, для переноса данных предпочтительнее использовать процесс резервного копирования и восстановления, если исходные и целевые системы совместимы друг с другом.
В этом учебном модуле мы не описываем задачи резервного копирования, восстановления и миграции. Более подробную информацию можно найти в учебном модуле Резервное копирование, восстановление и миграция баз данных MongoDB в Ubuntu 20.04.
Для этого учебного модуля вам потребуется следующее:
Чтобы узнать, как работает импорт информации в MongoDB, мы используем популярный образец базы данных MongoDB — базу о ресторанах. Эта база имеет формат json, и ее можно загрузить с помощью wget
следующим образом:
- wget https://raw.githubusercontent.com/mongodb/docs-assets/primer-dataset/primer-dataset.json
После завершения загрузки в текущем каталоге должен быть файл primer-dataset.json
(размер 12 Мбайт). Импортируем данные из этого файла в новую базу данных newdb
и в коллекцию restaurants
.
Используйте команду mongoimport
следующим образом:
- sudo mongoimport --db newdb --collection restaurants --file primer-dataset.json
Результат будет выглядеть вот так:
Output2020-11-11T19:37:55.607+0000 connected to: mongodb://localhost/
2020-11-11T19:37:57.841+0000 25359 document(s) imported successfully. 0 document(s) failed to import
Как показывает приведенная выше команда, были импортированы 25359 документов. Поскольку у нас не было базы данных с именем newdb
, MongoDB создала ее автоматически.
Давайте проверим импорт.
Подключитесь к только что созданной базе данных newdb
:
- sudo mongo newdb
Вы подключились к экземпляру базы данных newdb
. Обратите внимание, что ваша командная строка изменилась. Это означает, что вы подключены к базе данных.
Подсчитайте число документов в коллекции restaraunts с помощью команды:
- db.restaurants.count()
Будет выведен результат 25359
, т. е. количество импортированных документов. Для еще более эффективной проверки вы можете выбрать первый документ из коллекции restaraunts следующим образом:
- db.restaurants.findOne()
Результат будет выглядеть вот так:
[secondary label Output]
{
"_id" : ObjectId("5fac3d937f12c471b3f26733"),
"address" : {
"building" : "1007",
"coord" : [
-73.856077,
40.848447
],
"street" : "Morris Park Ave",
"zipcode" : "10462"
},
"borough" : "Bronx",
"cuisine" : "Bakery",
"grades" : [
{
"date" : ISODate("2014-03-03T00:00:00Z"),
"grade" : "A",
"score" : 2
},
...
],
"name" : "Morris Park Bake Shop",
"restaurant_id" : "30075445"
}
Такая детальная проверка может выявить проблемы с содержанием документа, кодировкой и т. д. Формат json использует кодировку UTF-8
, и ваши операции экспорта и импорта также должны использовать эту кодировку. Это необходимо помнить при редактировании файлов json вручную. В противном случае MongoDB автоматически сделает это за вас.
Чтобы выйти из командной строки MongoDB, введите команду exit
:
- exit
Вы вернетесь в обычную командную строку как пользователь без привилегий root.
Как мы уже упоминали, при экспорте информации MongoDB вы можете получить удобный для чтения файлы с вашими данными. По умолчанию экспорт выполняется в формате json, но также вы можете использовать для экспорта формат csv (разделенные запятыми значения).
Чтобы экспортировать информацию из MongoDB, используйте команду mongoexport
. Это позволяет выполнять детализированный экспорт с указанием базы данных, коллекции, поля, или даже с использованием запроса для экспорта.
Простой пример работы команды mongoexport
— экспорт коллекции restaurants из базы данных newdb
, куда мы ее до этого импортировали. Это можно сделать следующим образом:
- sudo mongoexport --db newdb -c restaurants --out newdbexport.json
В команде выше мы используем --db
для определения базы данных, -c
для определения коллекции и --out
для определения файла, куда будут сохранены данные.
Вывод успешной команды mongoexport
должен выглядеть вот так:
Output2020-11-11T19:39:57.595+0000 connected to: mongodb://localhost/
2020-11-11T19:39:58.619+0000 [###############.........] newdb.restaurants 16000/25359 (63.1%)
2020-11-11T19:39:58.871+0000 [########################] newdb.restaurants 25359/25359 (100.0%)
2020-11-11T19:39:58.871+0000 exported 25359 records
Этот вывод показывает, что было экспортировано 25359 документов, то есть, столько же документов, сколько мы импортировали.
В некоторых случаях, вам может быть нужно экспортировать только часть коллекции. Учитывая структуру и содержание файла restaurants json, давайте экспортируем все рестораны китайской кухни, расположенные в Бронксе. Если мы хотим получить эту информацию напрямую при подключении к MongoDB, нам нужно снова подключиться к базе данных:
- sudo mongo newdb
Затем, используйте следующий запрос:
- db.restaurants.find( { "borough": "Bronx", "cuisine": "Chinese" } )
Результаты будут выведены на терминал:
- Output2020-12-03T01:35:25.366+0000 connected to: mongodb://localhost/
- 2020-12-03T01:35:25.410+0000 exported 323 records
Чтобы выйти из диалогового окна MongoDB, введите exit
:
- exit
Если мы хотим экспортировать данные из командной строки sudo, а не во время подключения к базе данных, предыдущий запрос нужно сделать частью команды mongoexport
, указав его после аргумента -q
:
- sudo mongoexport --db newdb -c restaurants -q "{\"borough\": \"Bronx\", \"cuisine\": \"Chinese\"}" --out Bronx_Chinese_retaurants.json
Обратите внимание, что после двойных кавычек в тексте запроса идет обратная косая черта (\
). Точно так же нужно выделять и другие специальные символы в запросе.
Если экспорт выполнен успешно, результат будет выглядеть вот так:
Output2020-11-11T19:49:21.727+0000 connected to: mongodb://localhost/
2020-11-11T19:49:21.765+0000 exported 323 records
Выше показано, что мы экспортировали 323 записи, которые можно будет найти в заданном нами файле Bronx_Chinese_retaurants.json
.
Используйте cat
и less
для сканирования данных:
- cat Bronx_Chinese_retaurants.json | less
Используйте пробел
для прокрутки страниц данных:
- Outputdate":{"$date":"2015-01-14T00:00:00Z"},"grade":"Z","score":36}],"na{"_id":{"$oid":"5fc8402d141f5e54f9054f8d"},"address":{"building":"1236","coord":[-73.8893654,40.81376179999999],"street":"238 Spofford Ave","zipcode":"10474"},"borough":"Bronx","cuisine":"Chinese","grades":[{"date":{"$date":"2013-12-30T00:00:00Z"},"grade":"A","score":8},{"date":{"$date":"2013-01-08T00:00:00Z"},"grade":"A","score":10},{"date":{"$date":"2012-06-12T00:00:00Z"},"grade":"B","score":15}],
-
- . . .
Нажмите q
, чтобы выйти. Теперь вы можете импортировать и экспортировать базу данных MongoDB.
В этом учебном модуле мы познакомили вас с основами экспорта информации из базы данных MongoDB и импорта информации в эту БД. Дополнительную информацию можно найти в учебном модуле Резервное копирование, восстановление и миграция базы данных MongoDB в Ubuntu 20.04.
Также вы можете рассмотреть возможность использования репликации. Репликация позволяет продолжить выполнение службы MongoDB без перебоев на подчиненном сервере MongoDB во время восстановления главного сервера после неисправности. Частью процесса репликации является журнал операций (oplog), где записываются все операции, изменяющие данные. Вы можете использовать этот журнал, как если бы вы использовали двоичный журнал в MySQL для восстановления данных после последнего резервного копирования. Помните, что резервное копирование обычно выполняется ночью, и если вы решите восстановить данные вечером, вы потеряете все изменения, которые произошли с момента создания резервной копии.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!