Импорт данных в MongoDB

MongoDBBeginner
Практиковаться сейчас

Введение

В этой лабораторной работе вы освоите основные навыки импорта данных в базу данных 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.