Tutorial

Импорт и экспорт базы данных MongoDB в Ubuntu 20.04

Published on April 7, 2021
Русский
Импорт и экспорт базы данных MongoDB в Ubuntu 20.04

Автор выбрал COVID-19 Relief Fund для получения пожертвования в рамках программы Write for DOnations.

Введение

MongoDB — одна из самых популярных СУБД NoSQL. Она отличается масштабируемостью, мощностью и надежностью и удобством в использовании. В этом учебном модуле мы покажем, как импортировать и экспортировать ваши базы данных MongoDB.

Следует отметить, что под импортом и экспортом мы подразумеваем операции с данными в удобном для чтения формате, совместимом с другими программными продуктами. В отличие от импорта и экспорта, операции резервного копирования и восстановления используют специальные двоичные данные MongoDB, обеспечивающие согласованность и целостность данных и сохраняющие специальные атрибуты MongoDB. Таким образом, для переноса данных предпочтительнее использовать процесс резервного копирования и восстановления, если исходные и целевые системы совместимы друг с другом.

В этом учебном модуле мы не описываем задачи резервного копирования, восстановления и миграции. Более подробную информацию можно найти в учебном модуле Резервное копирование, восстановление и миграция баз данных MongoDB в Ubuntu 20.04.

Предварительные требования

Для этого учебного модуля вам потребуется следующее:

Шаг 1 — Импортирование информации в MongoDB

Чтобы узнать, как работает импорт информации в MongoDB, мы используем популярный образец базы данных MongoDB — базу о ресторанах. Эта база имеет формат json, и ее можно загрузить с помощью wget следующим образом:

  1. wget https://raw.githubusercontent.com/mongodb/docs-assets/primer-dataset/primer-dataset.json

После завершения загрузки в текущем каталоге должен быть файл primer-dataset.json (размер 12 Мбайт). Импортируем данные из этого файла в новую базу данных newdb и в коллекцию restaurants.

Используйте команду mongoimport следующим образом:

  1. sudo mongoimport --db newdb --collection restaurants --file primer-dataset.json

Результат будет выглядеть вот так:

Output
2020-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:

  1. sudo mongo newdb

Вы подключились к экземпляру базы данных newdb. Обратите внимание, что ваша командная строка изменилась. Это означает, что вы подключены к базе данных.

Подсчитайте число документов в коллекции restaraunts с помощью команды:

  1. db.restaurants.count()

Будет выведен результат 25359, т. е. количество импортированных документов. Для еще более эффективной проверки вы можете выбрать первый документ из коллекции restaraunts следующим образом:

  1. 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:

  1. exit

Вы вернетесь в обычную командную строку как пользователь без привилегий root.

Шаг 2 — Экспорт информации из MongoDB

Как мы уже упоминали, при экспорте информации MongoDB вы можете получить удобный для чтения файлы с вашими данными. По умолчанию экспорт выполняется в формате json, но также вы можете использовать для экспорта формат csv (разделенные запятыми значения).

Чтобы экспортировать информацию из MongoDB, используйте команду mongoexport. Это позволяет выполнять детализированный экспорт с указанием базы данных, коллекции, поля, или даже с использованием запроса для экспорта.

Простой пример работы команды mongoexport — экспорт коллекции restaurants из базы данных newdb, куда мы ее до этого импортировали. Это можно сделать следующим образом:

  1. sudo mongoexport --db newdb -c restaurants --out newdbexport.json

В команде выше мы используем --db для определения базы данных, -c для определения коллекции и --out для определения файла, куда будут сохранены данные.

Вывод успешной команды mongoexport должен выглядеть вот так:

Output
2020-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, нам нужно снова подключиться к базе данных:

  1. sudo mongo newdb

Затем, используйте следующий запрос:

  1. db.restaurants.find( { "borough": "Bronx", "cuisine": "Chinese" } )

Результаты будут выведены на терминал:

  1. Output
    2020-12-03T01:35:25.366+0000 connected to: mongodb://localhost/
  2. 2020-12-03T01:35:25.410+0000 exported 323 records

Чтобы выйти из диалогового окна MongoDB, введите exit:

  1. exit

Если мы хотим экспортировать данные из командной строки sudo, а не во время подключения к базе данных, предыдущий запрос нужно сделать частью команды mongoexport, указав его после аргумента -q:

  1. sudo mongoexport --db newdb -c restaurants -q "{\"borough\": \"Bronx\", \"cuisine\": \"Chinese\"}" --out Bronx_Chinese_retaurants.json

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

Если экспорт выполнен успешно, результат будет выглядеть вот так:

Output
2020-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 для сканирования данных:

  1. cat Bronx_Chinese_retaurants.json | less

Используйте пробел для прокрутки страниц данных:

  1. Output
    date":{"$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}],
  2. . . .

Нажмите 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.

Learn more about our products

About the authors
Default avatar
Toli

author



Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
Leave a comment


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!

Try DigitalOcean for free

Click below to sign up and get $200 of credit to try our products over 60 days!

Sign up

Join the Tech Talk
Success! Thank you! Please check your email for further details.

Please complete your information!

Featured on Community

Get our biweekly newsletter

Sign up for Infrastructure as a Newsletter.

Hollie's Hub for Good

Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.

Become a contributor

Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

Welcome to the developer cloud

DigitalOcean makes it simple to launch in the cloud and scale up as you grow — whether you're running one virtual machine or ten thousand.

Learn more