Введение
В этой лабораторной работе вы освоите основные навыки импорта данных в базу данных MongoDB. Вы будете работать с двумя распространенными форматами данных: JSON и CSV. Для загрузки данных из файлов в коллекции MongoDB вы будете использовать утилиту командной строки mongoimport. Лабораторная работа проведет вас через процесс импорта данных, указания типов данных во время импорта и проверки корректности загрузки данных с помощью запросов и утилиты mongoexport.
Импорт данных из файла JSON
На первом этапе вы импортируете данные из файла JSON в коллекцию MongoDB. JSON (JavaScript Object Notation) является нативным форматом для MongoDB, что делает процесс импорта простым. Мы будем использовать утилиту mongoimport, инструмент командной строки, предназначенный для этой цели.
Образец файла с именем books.json был создан для вас в каталоге ~/project. Сначала просмотрите его содержимое из вашего терминала.
cat ~/project/books.json
Вы должны увидеть следующий вывод, который представляет собой массив JSON-документов:
[
{
"_id": 1,
"title": "MongoDB Basics",
"author": "Jane Smith",
"year": 2023,
"tags": ["mongodb", "database", "nosql"]
},
{
"_id": 2,
"title": "Python Programming",
"author": "John Doe",
"year": 2022,
"tags": ["python", "programming"]
},
{
"_id": 3,
"title": "Data Science Handbook",
"author": "Alice Johnson",
"year": 2021,
"tags": ["data science", "python", "machine learning"]
}
]
Теперь импортируйте эти данные в новую базу данных с именем library_db и коллекцию с именем books.
mongoimport --db library_db --collection books --file ~/project/books.json --jsonArray
Разберем параметры команды:
--db library_db: Указывает целевую базу данных.--collection books: Указывает целевую коллекцию в базе данных.--file ~/project/books.json: Предоставляет путь к входному файлу.--jsonArray: Сообщаетmongoimport, что файл содержит один JSON-массив, где каждый элемент является документом для вставки.
Вы увидите вывод, указывающий на ход выполнения и завершение импорта:
2025-08-27T15:10:40.411+0800 connected to: mongodb://localhost/
2025-08-27T15:10:40.417+0800 3 document(s) imported successfully. 0 document(s) failed to import.
Чтобы убедиться, что данные были импортированы корректно, теперь вы подключитесь к MongoDB с помощью MongoDB Shell, mongosh.
mongosh
Оказавшись в оболочке, переключитесь на базу данных library_db:
use library_db
Теперь подсчитайте документы в коллекции books, чтобы подтвердить, что все три записи были импортированы.
db.books.countDocuments()
Вывод должен быть 3. Вы также можете просмотреть один из импортированных документов, чтобы проверить его структуру.
db.books.findOne()
Это отобразит первый документ из коллекции. Наконец, выйдите из MongoDB Shell, чтобы вернуться в ваш терминал.
exit
Импорт данных из файла CSV
Далее вы импортируете данные из файла CSV (Comma-Separated Values). CSV — это распространенный формат для табличных данных, и mongoimport может легко преобразовывать его в документы MongoDB.
Для вас был подготовлен образец файла CSV с именем library_members.csv. Ознакомьтесь с его содержимым.
cat ~/project/library_members.csv
Файл содержит строку заголовка и три строки данных:
name,age,membership_status
John Doe,35,active
Jane Smith,28,active
Mike Johnson,42,expired
Теперь используйте mongoimport для загрузки этих данных в новую коллекцию с именем members в той же базе данных library_db.
mongoimport --db library_db --collection members --type csv --file ~/project/library_members.csv --headerline
Вот новые параметры, используемые для импорта CSV:
--type csv: Указывает, что формат входного файла — CSV.--headerline: Сообщаетmongoimportиспользовать первую строку файла в качестве имен полей для документов.
Вывод подтвердит успешный импорт:
2025-08-27T15:11:33.553+0800 connected to: mongodb://localhost/
2025-08-27T15:11:33.558+0800 3 document(s) imported successfully. 0 document(s) failed to import.
Проверим импорт. Подключитесь к MongoDB Shell и проверьте коллекцию members. Вы можете указать базу данных непосредственно при запуске mongosh, чтобы пропустить шаг.
mongosh library_db
Теперь подсчитайте документы в коллекции members.
db.members.countDocuments()
Результат должен быть 3. Далее, просмотрите один из документов, чтобы увидеть, как mongoimport преобразовал строку CSV в документ BSON.
db.members.findOne()
Вы увидите документ, похожий на этот. Обратите внимание, что все значения, включая age, по умолчанию импортируются как строки.
{
_id: ObjectId("..."),
name: 'John Doe',
age: '35',
membership_status: 'active'
}
Вы узнаете, как обрабатывать типы данных, на следующем шаге. Пока что выйдите из оболочки.
exit
Обработка типов данных при импорте CSV
При импорте из файла CSV mongoimport по умолчанию обрабатывает все значения как строки. Это может быть проблемой, если вам нужно выполнять числовые операции или операции на основе дат. На этом шаге вы узнаете, как импортировать данные CSV, а затем преобразовывать типы данных в MongoDB.
Давайте повторно импортируем данные из library_members.csv в новую коллекцию под названием typed_members, а затем преобразуем поле age в целое число.
Сначала создайте файл CSV без заголовков, поскольку мы будем явно определять имена полей:
tail -n +2 ~/project/library_members.csv > ~/project/library_members_no_header.csv
Теперь импортируйте данные с явными именами полей:
mongoimport --db library_db --collection typed_members --type csv --file ~/project/library_members_no_header.csv --fields "name,age,membership_status"
После импорта нам нужно преобразовать поле age из строки в целое число, используя операцию обновления MongoDB:
mongosh library_db --eval "db.typed_members.updateMany({}, [{ \$set: { age: { \$toInt: \"\$age\" } } }])"
Эта команда использует конвейер агрегации MongoDB в рамках операции обновления для преобразования всех значений age из строк в целые числа с помощью оператора $toInt.
Теперь проверим результат, подключившись к mongosh и изучив типы данных в коллекции typed_members.
mongosh library_db
Сначала найдите один документ в коллекции, чтобы увидеть преобразованные данные:
db.typed_members.findOne()
Вывод должен показать поле age как число:
{
_id: ObjectId("..."),
name: 'Jane Smith',
age: 28,
membership_status: 'active'
}
Вы можете явно проверить тип поля age, используя оператор typeof JavaScript в mongosh:
typeof db.typed_members.findOne().age
Вывод должен быть number, подтверждая, что преобразование типов данных прошло успешно. Это позволит вам выполнять числовые запросы, например, находить всех членов старше 30 лет:
db.typed_members.find({ age: { $gt: 30 } })
Этот запрос теперь будет работать как ожидалось и вернет два документа. Выйдите из оболочки, чтобы перейти к следующему шагу:
exit
Проверка данных с помощью запросов и экспорта
Последний шаг в любом процессе импорта данных — тщательная проверка. Это включает не только проверку количества документов, но и выполнение запросов для выборки данных и обеспечения их целостности. Вы также можете экспортировать данные во внешний файл для дальнейшего анализа.
Сначала подключитесь к своей базе данных с помощью mongosh.
mongosh library_db
Вы можете вывести список всех коллекций в базе данных, чтобы увидеть результаты проделанной работы.
show collections
Вы должны увидеть books, members и typed_members. Теперь давайте выполним несколько запросов для проверки данных. Для коллекции books найдите все книги с тегом "python".
db.books.find({ tags: "python" })
Этот запрос демонстрирует поиск по полю массива. Должны быть возвращены две книги. Для коллекции typed_members найдите всех членов с активным статусом членства.
db.typed_members.find({ membership_status: "active" })
Должны быть возвращены два члена. Эти простые запросы помогают подтвердить, что данные структурированы должным образом.
Еще одним мощным инструментом проверки является mongoexport, который выполняет обратную операцию mongoimport. Он экспортирует коллекцию в файл. Давайте экспортируем коллекцию books в новый файл JSON. Сначала выйдите из оболочки.
exit
Теперь выполните команду mongoexport из вашего терминала.
mongoexport --db library_db --collection books --out ~/project/exported_books.json
Флаг --out указывает путь к выходному файлу. Эта команда создаст файл с именем exported_books.json в вашем каталоге проекта. Вы можете просмотреть его содержимое, чтобы убедиться в успешном экспорте.
cat ~/project/exported_books.json
Каждая строка в выходном файле представляет собой отдельный JSON-документ из вашей коллекции. Этот файл может использоваться для резервного копирования, миграции или анализа с помощью других инструментов.
Резюме
В этой лабораторной работе вы научились импортировать данные в MongoDB из файлов JSON и CSV с помощью утилиты mongoimport. Вы отработали импорт массива JSON в коллекцию и проверили результат с помощью mongosh. Затем вы импортировали данные из файла CSV, сначала с типами данных по умолчанию (строки), а затем, указав типы данных для таких полей, как числа. Наконец, вы узнали, как проверять целостность импортированных данных, выполняя запросы в mongosh и экспортируя коллекцию обратно в файл с помощью mongoexport. Это фундаментальные навыки для управления данными в любом проекте MongoDB.

