Удаление данных MongoDB

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

Введение

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

Лабораторная работа охватывает следующие темы: удаление одного документа с помощью deleteOne(), удаление нескольких документов с помощью deleteMany(), использование операторов запросов для условного удаления и очистка коллекции с помощью deleteMany({}) или drop(). К концу этой лабораторной работы вы получите твердое понимание того, как удалять данные в MongoDB различными способами.

Удаление одного документа

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

Запустите оболочку MongoDB, выполнив следующую команду в вашем терминале:

mongosh

Находясь в оболочке, вы создадите новую базу данных и коллекцию с несколькими документами.

use mylab_database

Создайте новую коллекцию с несколькими документами.

db.users.insertMany([
  { name: "John Doe", age: 30, email: "john@example.com" },
  { name: "Jane Smith", age: 25, email: "jane@example.com" },
  { name: "Bob Johnson", age: 35, email: "bob@example.com" }
]);

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

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

Теперь, чтобы удалить один документ, используйте метод deleteOne(). Этот метод находит первый документ, соответствующий указанному фильтру, и удаляет его. Давайте удалим документ для "Jane Smith".

db.users.deleteOne({ name: "Jane Smith" });

Вывод указывает, что один документ был успешно удален.

{ "acknowledged": true, "deletedCount": 1 }
  • deleteOne(): Этот метод удаляет только первый документ, соответствующий критериям фильтра.
  • { name: "Jane Smith" }: Это фильтр, который указывает, какой документ следует удалить.
  • deletedCount: 1: Это подтверждает, что был удален один документ.

Чтобы убедиться, что документ был удален, вы можете вывести все оставшиеся документы в коллекции users.

db.users.find();

Вывод теперь покажет только два документа, подтверждая, что "Jane Smith" была удалена.

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

На предыдущем шаге вы удалили один документ. Теперь вы научитесь удалять несколько документов одновременно с помощью метода deleteMany(). Это полезно для операций массового удаления, таких как очистка записей с определенным статусом.

Сначала давайте добавим несколько новых документов в нашу коллекцию users. Эти документы будут иметь поле status, которое мы будем использовать для нашей операции массового удаления.

db.users.insertMany([
  { name: "Alice Wilson", age: 28, status: "inactive" },
  { name: "Charlie Brown", age: 40, status: "inactive" },
  { name: "David Lee", age: 35, status: "active" },
  { name: "Eve Taylor", age: 45, status: "inactive" }
]);

Вывод подтвердит вставку четырех новых документов.

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

Теперь используйте метод deleteMany(), чтобы удалить всех пользователей, чей статус "inactive".

db.users.deleteMany({ status: "inactive" });

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

{ "acknowledged": true, "deletedCount": 3 }
  • deleteMany(): Этот метод удаляет все документы, соответствующие критериям фильтра.
  • { status: "inactive" }: Этот фильтр нацелен на все документы, где поле status имеет значение "inactive".

Чтобы подтвердить массовое удаление, выведите все оставшиеся документы в коллекции.

db.users.find();

Вывод покажет только те документы, которые не имели статуса "inactive", демонстрируя успешное массовое удаление.

Удаление документов по условиям

MongoDB позволяет использовать мощные операторы запросов для удаления документов на основе более сложных условий. На этом шаге вы научитесь использовать такие операторы, как $gt (больше чем) и $lt (меньше чем), для выполнения условных удалений.

Сначала давайте создадим новую коллекцию с именем employees и некоторыми примерами данных.

db.employees.insertMany([
  { name: "John Doe", age: 25, department: "Sales", salary: 50000 },
  { name: "Jane Smith", age: 35, department: "Marketing", salary: 60000 },
  { name: "Bob Johnson", age: 45, department: "Sales", salary: 55000 },
  { name: "Alice Brown", age: 30, department: "HR", salary: 52000 }
]);

Вывод подтвердит вставку четырех документов.

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

Теперь выполним условное удаление. Мы удалим всех сотрудников старше 40 лет.

db.employees.deleteMany({ age: { $gt: 40 } });

Вывод указывает, что был удален один документ.

{ "acknowledged": true, "deletedCount": 1 }
  • { age: { $gt: 40 } }: Этот фильтр использует оператор $gt для выбора документов, где поле age больше 40.

Далее выполним удаление на основе нескольких условий. Мы удалим сотрудников из отдела "Sales", чья зарплата меньше 55 000.

db.employees.deleteMany({
  department: "Sales",
  salary: { $lt: 55000 }
});

Вывод подтверждает, что был удален еще один документ.

{ "acknowledged": true, "deletedCount": 1 }
  • Эта команда объединяет два условия: department должен быть "Sales", а salary должен быть меньше 55 000 (с использованием оператора $lt).

Чтобы проверить результаты, просмотрите оставшиеся документы в коллекции employees.

db.employees.find();

Вывод покажет только двух сотрудников, которые не соответствовали критериям удаления.

Очистка всех данных из коллекции

Иногда может потребоваться удалить все документы из коллекции. MongoDB предоставляет два основных способа достижения этой цели: использование deleteMany({}) для удаления всех документов или использование drop() для удаления всей коллекции.

Сначала давайте создадим новую коллекцию products с некоторыми примерами данных.

db.products.insertMany([
  { name: "Laptop", price: 1000, category: "Electronics" },
  { name: "Smartphone", price: 500, category: "Electronics" },
  { name: "Headphones", price: 100, category: "Electronics" }
]);

Способ 1: Удаление всех документов с помощью deleteMany()

Вы можете удалить все документы из коллекции, передав пустой фильтр {} методу deleteMany(). Этот подход удаляет данные, но сохраняет саму коллекцию, включая ее индексы.

db.products.deleteMany({});

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

{ "acknowledged": true, "deletedCount": 3 }

Вы можете убедиться, что коллекция теперь пуста, выполнив запрос find().

db.products.find();

Эта команда не вернет никаких документов.

Способ 2: Удаление всей коллекции с помощью drop()

Метод drop() является более деструктивным. Он полностью удаляет коллекцию, включая все ее документы, индексы и связанную метаинформацию.

Сначала давайте повторно вставим пример данных, чтобы у нас была коллекция для удаления.

db.products.insertMany([
  { name: "Laptop", price: 1000, category: "Electronics" },
  { name: "Smartphone", price: 500, category: "Electronics" },
  { name: "Headphones", price: 100, category: "Electronics" }
]);

Теперь полностью удалим коллекцию products.

db.products.drop();

Вывод true подтверждает, что коллекция была успешно удалена.

true

Если вы теперь попытаетесь выполнить запрос к коллекции products, вы не получите никаких результатов, поскольку коллекция больше не существует.

db.products.find();

Эта команда не даст никакого вывода, так как коллекция удалена. Чтобы выйти из оболочки mongosh, вы можете набрать exit или нажать Ctrl+D.

Резюме

В этой лабораторной работе вы изучили основные методы удаления данных в MongoDB. Вы начали с использования метода deleteOne() для удаления одного документа на основе определенного фильтра. Затем вы перешли к массовому удалению с помощью deleteMany(), который эффективно удаляет несколько документов, соответствующих критерию. Вы также узнали, как использовать операторы запросов, такие как $gt и $lt, для выполнения более сложных условных удалений. Наконец, вы изучили два метода очистки коллекции: использование deleteMany({}) для удаления всех документов с сохранением структуры коллекции и использование drop() для окончательного удаления всей коллекции.

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