Вставка данных в MongoDB

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

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

Введение

В этом практическом занятии (лабораторной работе) вы научитесь вставлять данные в MongoDB различными методами и изучите основные техники манипуляции данными. С помощью серии практических упражнений вы научитесь вставлять одиночные и множественные документы, обрабатывать возможные ошибки и проверять целостность данных с использованием оболочки (shell) MongoDB.

В рамках практического занятия рассматриваются основные операции CRUD (Create, Read, Update, Delete), с акцентом на стратегии вставки документов. Вы создадите базу данных для книжного магазина, вставите документы с разной структурой, обработаете ограничения уникального индекса и проверите схемы документов. По завершении этого практического занятия вы получите твёрдое понимание того, как эффективно добавлять и управлять данными в MongoDB.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL mongodb(("MongoDB")) -.-> mongodb/ErrorHandlingGroup(["Error Handling"]) mongodb(("MongoDB")) -.-> mongodb/RelationshipsGroup(["Relationships"]) mongodb(("MongoDB")) -.-> mongodb/BasicOperationsGroup(["Basic Operations"]) mongodb(("MongoDB")) -.-> mongodb/QueryOperationsGroup(["Query Operations"]) mongodb(("MongoDB")) -.-> mongodb/IndexingGroup(["Indexing"]) mongodb/BasicOperationsGroup -.-> mongodb/create_database_collection("Create Database and Collection") mongodb/BasicOperationsGroup -.-> mongodb/insert_document("Insert Document") mongodb/BasicOperationsGroup -.-> mongodb/bulk_insert_documents("Bulk Insert Documents") mongodb/QueryOperationsGroup -.-> mongodb/find_documents("Find Documents") mongodb/QueryOperationsGroup -.-> mongodb/query_with_conditions("Query with Conditions") mongodb/QueryOperationsGroup -.-> mongodb/project_fields("Project Fields") mongodb/IndexingGroup -.-> mongodb/create_index("Create Index") mongodb/ErrorHandlingGroup -.-> mongodb/handle_write_errors("Handle Write Errors") mongodb/RelationshipsGroup -.-> mongodb/create_document_references("Create Document References") subgraph Lab Skills mongodb/create_database_collection -.-> lab-420696{{"Вставка данных в MongoDB"}} mongodb/insert_document -.-> lab-420696{{"Вставка данных в MongoDB"}} mongodb/bulk_insert_documents -.-> lab-420696{{"Вставка данных в MongoDB"}} mongodb/find_documents -.-> lab-420696{{"Вставка данных в MongoDB"}} mongodb/query_with_conditions -.-> lab-420696{{"Вставка данных в MongoDB"}} mongodb/project_fields -.-> lab-420696{{"Вставка данных в MongoDB"}} mongodb/create_index -.-> lab-420696{{"Вставка данных в MongoDB"}} mongodb/handle_write_errors -.-> lab-420696{{"Вставка данных в MongoDB"}} mongodb/create_document_references -.-> lab-420696{{"Вставка данных в MongoDB"}} end

Вставка одиночного документа

Добро пожаловать в практическое занятие (лабораторную работу) по MongoDB! На этом первом этапе мы рассмотрим, как вставлять документы в коллекцию MongoDB. MongoDB - это мощная NoSQL- база данных, которая хранит данные в гибких документах, похожих на JSON, что делает ее невероятно универсальной для различных потребностей приложений.

Основы MongoDB

Прежде чем приступить, давайте кратко обсудим, что мы будем делать. Мы создадим базу данных для книжного магазина и научимся вставлять документы, представляющие книги. Это поможет вам понять основные техники вставки документов в MongoDB.

Подключение к MongoDB

Сначала откройте терминал и подключитесь к MongoDB с помощью mongosh:

mongosh

Вы должны увидеть приглашение оболочки (shell) MongoDB, что означает успешное подключение.

Создание базы данных и коллекции

Создадим новую базу данных с именем bookstore и коллекцию с именем books:

use bookstore
db.createCollection("books")

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

switched to db bookstore
{ ok: 1 }

Вставка одиночного документа

Теперь вставим один документ, представляющий книгу, в коллекцию books:

db.books.insertOne({
  title: "The Great Gatsby",
  author: "F. Scott Fitzgerald",
  year: 1925,
  genres: ["Classic", "Fiction"]
})

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

{
  acknowledged: true,
  insertedId: ObjectId("...unique-object-id...")
}

Обратите внимание, как MongoDB автоматически генерирует уникальный идентификатор _id для каждого документа. Это помогает обеспечить уникальную идентификацию каждого документа в коллекции.

Массовая вставка документов

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

Подготовка к массовой вставке

Мы продолжим работу в базе данных bookstore и добавим сразу несколько документов о книгах:

use bookstore

Вставка нескольких документов

Используйте метод insertMany(), чтобы добавить несколько документов о книгах:

db.books.insertMany([
  {
    title: "1984",
    author: "George Orwell",
    year: 1949,
    genres: ["Dystopian", "Science Fiction"]
  },
  {
    title: "To Kill a Mockingbird",
    author: "Harper Lee",
    year: 1960,
    genres: ["Classic", "Fiction"]
  },
  {
    title: "Pride and Prejudice",
    author: "Jane Austen",
    year: 1813,
    genres: ["Romance", "Classic"]
  }
])

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

{
  acknowledged: true,
  insertedIds: {
    '0': ObjectId("..."),
    '1': ObjectId("..."),
    '2': ObjectId("...")
  }
}

Проверка вставленных документов

Давайте убедимся в количестве документов в коллекции:

db.books.countDocuments()

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

4

Это показывает, что в нашей коллекции теперь есть 4 документа.

Проверка результатов вставки

На этом этапе мы рассмотрим, как извлекать и изучать документы, которые мы вставили в нашу коллекцию MongoDB. Это важно для проверки данных и выполнения запросов.

Поиск всех документов

Используйте метод find(), чтобы извлечь все документы из коллекции books:

use bookstore
db.books.find()

В примере вывода будут отображены все детали документов с полной информацией.

Поиск конкретных документов

Извлеките документы, используя определенные критерии:

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

В примере вывода будут показаны книги, опубликованные до 1950 года.

Поиск документов с определенными полями

Извлеките определенные поля из документов:

## Найти названия и авторов классических книг
db.books.find(
  { genres: "Classic" },
  { title: 1, author: 1, _id: 0 }
)

Эта команда возвращает только названия и авторов классических книг, исключая поле _id.

Обработка ошибок вставки

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

Создание уникального индекса

Сначала создайте уникальный индекс для поля title, чтобы предотвратить дублирование названий книг:

use bookstore
db.books.createIndex({ title: 1 }, { unique: true })

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

title_1

Попытка вставки дублирующего документа

Попробуйте вставить документ с уже существующим названием:

db.books.insertOne({
  title: "1984",
  author: "George Orwell",
  year: 1949,
  genres: ["Dystopian", "Science Fiction"]
})

В результате этого возникнет ошибка о дублировании ключа.

Обработка ошибок вставки с использованием try-catch

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

try {
  db.books.insertOne({
    title: "1984",
    author: "George Orwell",
    year: 1949,
    genres: ["Dystopian", "Science Fiction"]
  })
} catch (e) {
  print("Error inserting document:", e.message)
}

Этот подход демонстрирует плавную обработку ошибок при вставке документов.

Проверка целостности данных

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

Подсчет документов

Проверьте общее количество документов:

use bookstore
db.books.countDocuments()

Проверка существования конкретного документа

Используйте findOne(), чтобы проверить существование конкретного документа:

db.books.findOne({ title: "To Kill a Mockingbird" })

Валидация схемы коллекции

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

db.runCommand({
  collMod: "books",
  validator: {
    $jsonSchema: {
      bsonType: "object",
      required: ["title", "author", "year"],
      properties: {
        title: {
          bsonType: "string",
          description: "must be a string and is required"
        },
        author: {
          bsonType: "string",
          description: "must be a string and is required"
        },
        year: {
          bsonType: "int",
          minimum: 1000,
          maximum: 2023,
          description: "must be an integer between 1000 and 2023"
        }
      }
    }
  }
})

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

Итоги

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

Основные навыки, которые вы приобрели, включают использование методов insertOne() и insertMany(), создание уникальных индексов, применение стратегий обработки ошибок и проверку структуры документов. Эти основные операции CRUD (создание, чтение, обновление, удаление) дают прочный фундамент для работы с MongoDB, позволяя эффективно управлять и манипулировать данными в NoSQL- базах данных.