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

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

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии вы научитесь импортировать данные в MongoDB в форматах JSON и CSV. Первый шаг посвящен импорту JSON-файлов. Вы создадите пример JSON-файла и используете команду mongoimport, чтобы импортировать его в базу данных MongoDB. Второй шаг посвящен импорту CSV-данных. Вам будет показано, как создать CSV-файл и использовать команду mongoimport, чтобы загрузить его в MongoDB. Практическое занятие также включает в себя шаги по проверке результатов импорта, обработке возможных ошибок и проверке импортированных данных, чтобы обеспечить полное понимание процесса импорта в MongoDB.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL mongodb(("MongoDB")) -.-> mongodb/QueryOperationsGroup(["Query Operations"]) mongodb(("MongoDB")) -.-> mongodb/ErrorHandlingGroup(["Error Handling"]) mongodb(("MongoDB")) -.-> mongodb/DataImportExportGroup(["Data Import Export"]) mongodb(("MongoDB")) -.-> mongodb/BasicOperationsGroup(["Basic Operations"]) mongodb/BasicOperationsGroup -.-> mongodb/start_mongodb_shell("Start MongoDB Shell") mongodb/BasicOperationsGroup -.-> mongodb/create_database_collection("Create Database and Collection") mongodb/QueryOperationsGroup -.-> mongodb/find_documents("Find Documents") mongodb/QueryOperationsGroup -.-> mongodb/query_with_conditions("Query with Conditions") mongodb/ErrorHandlingGroup -.-> mongodb/handle_write_errors("Handle Write Errors") mongodb/DataImportExportGroup -.-> mongodb/import_data_json("Import Data from JSON") mongodb/DataImportExportGroup -.-> mongodb/import_data_csv("Import Data from CSV") subgraph Lab Skills mongodb/start_mongodb_shell -.-> lab-422086{{"Импорт данных в MongoDB"}} mongodb/create_database_collection -.-> lab-422086{{"Импорт данных в MongoDB"}} mongodb/find_documents -.-> lab-422086{{"Импорт данных в MongoDB"}} mongodb/query_with_conditions -.-> lab-422086{{"Импорт данных в MongoDB"}} mongodb/handle_write_errors -.-> lab-422086{{"Импорт данных в MongoDB"}} mongodb/import_data_json -.-> lab-422086{{"Импорт данных в MongoDB"}} mongodb/import_data_csv -.-> lab-422086{{"Импорт данных в MongoDB"}} end

Импорт JSON-файлов

В этом шаге вы научитесь импортировать JSON-файлы в MongoDB с использованием команды mongoimport. JSON (JavaScript Object Notation) — популярный формат обмена данными, который MongoDB может легко импортировать.

Сначала создадим пример JSON-файла с некоторыми данными. Будем использовать простой набор данных о книгах.

Откройте терминал и перейдите в каталог проекта:

cd ~/project

Создайте файл с именем books.json с использованием nano:

nano books.json

Добавьте следующий JSON-контент:

[
  {
    "title": "MongoDB Basics",
    "author": "Jane Smith",
    "year": 2023
  },
  {
    "title": "Python Programming",
    "author": "John Doe",
    "year": 2022
  },
  {
    "title": "Data Science Handbook",
    "author": "Alice Johnson",
    "year": 2021
  }
]

Сохраните файл, нажав Ctrl+X, затем Y и Enter.

Теперь запустите MongoDB shell:

mongosh

Создайте новую базу данных и переключитесь на нее:

use library_database

Выйдите из MongoDB shell:

exit

Импортируйте JSON-файл в коллекцию books:

mongoimport --db library_database --collection books --file ~/project/books.json --jsonArray

Пример вывода:

[#######......] 2/3 documents
2023-xx-xx 00:00:00.000 [############] library_database.books 3/3 documents

Проверим импорт, используя mongosh для подсчета документов:

mongosh library_database --eval "db.books.countDocuments()"

Пример вывода:

3

Импорт CSV-данных

В этом шаге вы научитесь импортировать CSV (Comma-Separated Values) файлы в MongoDB с использованием команды mongoimport. CSV — распространенный формат для хранения табличных данных.

Сначала создадим пример CSV-файла с данными о членах библиотеки.

Перейдите в каталог проекта:

cd ~/project

Создайте файл с именем library_members.csv с использованием nano:

nano library_members.csv

Добавьте следующий CSV-контент:

name,age,membership_type,join_date
John Doe,35,Premium,2023-01-15
Jane Smith,28,Standard,2022-11-20
Alice Johnson,42,Gold,2021-06-10
Bob Williams,55,Premium,2022-03-05

Сохраните файл, нажав Ctrl+X, затем Y и Enter.

Запустите MongoDB shell:

mongosh

Создайте новую базу данных и переключитесь на нее:

use library_database

Выйдите из MongoDB shell:

exit

Импортируйте CSV-файл в коллекцию members:

mongoimport --db library_database --collection members --type csv --file ~/project/library_members.csv --headerline

Флаг --headerline сообщает MongoDB использовать первую строку CSV в качестве имен полей.

Пример вывода:

[#######......] 2/4 documents
2023-xx-xx 00:00:00.000 [############] library_database.members 4/4 documents

Проверим импорт, используя mongosh для подсчета документов и просмотра первых нескольких записей:

mongosh library_database --eval "db.members.countDocuments()"

Пример вывода:

4

Теперь посмотрим на импортированные документы:

mongosh library_database --eval "db.members.find().limit(2)"

Пример вывода:

[
  {
    _id: ObjectId("..."),
    name: 'John Doe',
    age: 35,
    membership_type: 'Premium',
    join_date: '2023-01-15'
  },
  {
    _id: ObjectId("..."),
    name: 'Jane Smith',
    age: 28,
    membership_type: 'Standard',
    join_date: '2022-11-20'
  }
]

Проверить результаты импорта

В этом шаге вы научитесь проверять и изучать данные, которые вы импортировали в MongoDB. Мы будем использовать различные команды MongoDB для проверки импортированных коллекций и их содержимого.

Запустите MongoDB shell:

mongosh library_database

Сначала выведем список всех коллекций в нашей базе данных:

show collections

Пример вывода:

books
members

Теперь давайте более подробно изучим данные. Мы будем использовать разные методы для проверки и запроса к нашим импортированным коллекциям.

Подсчитайте количество документов в каждой коллекции:

db.books.countDocuments()
db.members.countDocuments()

Пример вывода:

3
4

Найдем конкретные документы с использованием фильтров запросов:

// Найти книги, опубликованные после 2022 года
db.books.find({ year: { $gt: 2022 } })

Пример вывода:

[
  {
    _id: ObjectId("..."),
    title: 'MongoDB Basics',
    author: 'Jane Smith',
    year: 2023
  }
]

Теперь запросим членов с определенным типом членства:

// Найти премиум-членов
db.members.find({ membership_type: "Premium" })

Пример вывода:

[
  {
    _id: ObjectId("..."),
    name: 'John Doe',
    age: 35,
    membership_type: 'Premium',
    join_date: '2023-01-15'
  },
  {
    _id: ObjectId("..."),
    name: 'Bob Williams',
    age: 55,
    membership_type: 'Premium',
    join_date: '2022-03-05'
  }
]

Экспортируем коллекцию, чтобы проверить ее содержимое:

exit

Используем mongoexport, чтобы экспортировать коллекцию членов в JSON-файл:

mongoexport --db library_database --collection members --out ~/project/exported_members.json

Посмотрим на экспортированный файл:

cat ~/project/exported_members.json

Это позволяет вам проверить импортированные данные вне MongoDB.

Обработка ошибок импорта

В этом шаге вы научитесь обрабатывать общие ошибки импорта при работе с MongoDB и mongoimport. Понимание этих ошибок поможет вам устранять проблемы при импорте данных.

Сначала создадим примерный файл с некоторыми проблемами при импорте:

cd ~/project

Создадим намеренно проблемный CSV-файл:

nano problematic_members.csv

Добавим следующее содержимое:

name,age,membership_type,join_date
John Doe,thirty-five,Premium,2023-01-15
Jane Smith,28,Standard,invalid-date
Alice Johnson,42,Gold,2021-06-10

Заметим намеренные ошибки:

  • "thirty-five" не является допустимым числом
  • "invalid-date" не имеет правильного формата даты

Попробуем импортировать этот файл:

mongoimport --db library_database --collection problematic_members --type csv --file ~/project/problematic_members.csv --headerline

Вероятно, вы увидите сообщение об ошибке, похожее на это:

2024-xx-xx 00:00:00.000 [#######] Failed: document validation error

Для обработки таких ошибок используйте флаги --stopOnError и --jsonArray:

mongoimport --db library_database --collection problematic_members --type csv --file ~/project/problematic_members.csv --headerline --stopOnError

Создадим чистую версию файла:

nano clean_members.csv

Добавим исправленное содержимое:

name,age,membership_type,join_date
John Doe,35,Premium,2023-01-15
Jane Smith,28,Standard,2022-11-20
Alice Johnson,42,Gold,2021-06-10

Теперь импортируем с проверкой:

mongoimport --db library_database --collection clean_members --type csv --file ~/project/clean_members.csv --headerline

Проверим импорт:

mongosh library_database --eval "db.clean_members.find()"

Давайте покажем еще одну общую ошибку — неправильный формат JSON:

nano invalid_books.json

Добавим намеренно неправильный JSON:

[
  {
    "title": "MongoDB Basics",
    "author": "Jane Smith",
    "year": 2023
  },
  {
    "title": "Incomplete Book"
    // Отсутствует запятая и закрывающая фигурная скобка
  }
]

Попробуем импортировать этот файл:

mongoimport --db library_database --collection invalid_books --file ~/project/invalid_books.json --jsonArray

Вы увидите ошибку при разборе JSON.

Создадим правильный JSON-файл:

nano valid_books.json

Добавим правильный JSON:

[
  {
    "title": "MongoDB Basics",
    "author": "Jane Smith",
    "year": 2023
  },
  {
    "title": "Complete Book",
    "author": "John Doe",
    "year": 2022
  }
]

Импортируем правильный JSON:

mongoimport --db library_database --collection valid_books --file ~/project/valid_books.json --jsonArray

Проверить импортированные данные

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

Запустите MongoDB shell:

mongosh library_database

Сначала проведем комплексную проверку данных:

// Проверить общее количество коллекций
show collections

Пример вывода:

books
members
clean_members
valid_books

Подсчитать количество документов в каждой коллекции:

db.books.countDocuments()
db.members.countDocuments()
db.clean_members.countDocuments()
db.valid_books.countDocuments()

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

// Найти книги, опубликованные после 2022 года
db.books.find({ year: { $gt: 2022 } })

// Найти членов старше 30 лет
db.members.find({ age: { $gt: 30 } })

Выйти из MongoDB shell:

exit

Использовать mongoexport для экспорта коллекций для внешней проверки:

## Экспортировать коллекцию books
mongoexport --db library_database --collection books --out ~/project/exported_books.json

## Экспортировать коллекцию members
mongoexport --db library_database --collection members --out ~/project/exported_members.json

Проверить экспортированные файлы:

## Проверить экспортированные книги
head -n 5 ~/project/exported_books.json

## Проверить экспортированных членов
head -n 5 ~/project/exported_members.json

Выполнить проверку согласованности данных:

## Сравнить размеры коллекций
wc -l ~/project/exported_books.json
wc -l ~/project/exported_members.json

По желанию: использовать jq для проверки JSON:

## Установить jq, если он еще не установлен
sudo apt-get update
sudo apt-get install -y jq

## Проверить структуру JSON
jq '.' ~/project/exported_books.json
jq '.' ~/project/exported_members.json

Давайте создадим простой скрипт проверки:

nano ~/project/verify_import.sh

Добавьте следующее содержимое:

#!/bin/bash

## Проверить импорт в MongoDB
echo "Checking MongoDB Collections:"
mongosh library_database --quiet --eval "
    print('Books count: ' + db.books.countDocuments());
    print('Members count: ' + db.members.countDocuments());
    print('Clean Members count: ' + db.clean_members.countDocuments());
    print('Valid Books count: ' + db.valid_books.countDocuments());
"

Сделайте скрипт исполняемым:

chmod +x ~/project/verify_import.sh

Запустите скрипт проверки:

~/project/verify_import.sh

Резюме

В этом практическом занятии вы узнали, как импортировать JSON и CSV-данные в MongoDB с использованием команды mongoimport. Для JSON-файлов вы создали примерный файл books.json, импортировали его в базу данных library_database и проверили импорт, подсчитав документы. Для CSV-данных вы создали файл library_members.csv, импортировали его в ту же базу данных и проверили результаты импорта. Также вы узнали, как обрабатывать ошибки импорта и проверять импортированные данные.