MongoDB Daten löschen

MongoDBBeginner
Jetzt üben

Einführung

In diesem Lab lernen Sie, wie Sie Daten effektiv in einer MongoDB-Datenbank löschen. Sie beginnen mit dem Löschen eines einzelnen Dokuments und erkunden dann Techniken für Massenlöschungen und das Entfernen von Daten basierend auf spezifischen Bedingungen. Abschließend lernen Sie, wie Sie eine gesamte Collection leeren und die Löschungsergebnisse überprüfen. Diese Fähigkeiten sind unerlässlich für die Verwaltung Ihrer MongoDB-Datenbank und die Aufrechterhaltung der Datenintegrität.

Das Lab behandelt die folgenden Themen: Löschen eines einzelnen Dokuments mit deleteOne(), Entfernen mehrerer Dokumente mit deleteMany(), Verwendung von Query-Operatoren für bedingte Löschungen und Leeren einer Collection mit deleteMany({}) oder drop(). Am Ende dieses Labs werden Sie ein solides Verständnis dafür haben, wie Sie Daten in MongoDB mit verschiedenen Methoden löschen können.

Ein einzelnes Dokument löschen

In diesem Schritt lernen Sie, wie Sie ein einzelnes Dokument aus einer MongoDB-Collection löschen. Zuerst müssen Sie sich mit der MongoDB-Shell verbinden und einige Beispieldaten vorbereiten.

Starten Sie die MongoDB-Shell, indem Sie den folgenden Befehl in Ihrem Terminal ausführen:

mongosh

Sobald Sie sich in der Shell befinden, erstellen Sie eine neue Datenbank und eine Collection mit einigen Dokumenten.

use mylab_database

Erstellen Sie eine neue Collection mit einigen Dokumenten.

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" }
]);

Die Ausgabe bestätigt, dass drei Dokumente eingefügt wurden.

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

Um nun ein einzelnes Dokument zu löschen, verwenden Sie die Methode deleteOne(). Diese Methode findet das erste Dokument, das dem angegebenen Filter entspricht, und entfernt es. Löschen wir das Dokument für "Jane Smith".

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

Die Ausgabe zeigt an, dass ein Dokument erfolgreich gelöscht wurde.

{ "acknowledged": true, "deletedCount": 1 }
  • deleteOne(): Diese Methode entfernt nur das erste Dokument, das den Filterkriterien entspricht.
  • { name: "Jane Smith" }: Dies ist der Filter, der angibt, welches Dokument gelöscht werden soll.
  • deletedCount: 1: Dies bestätigt, dass ein Dokument entfernt wurde.

Um zu überprüfen, ob das Dokument gelöscht wurde, können Sie alle verbleibenden Dokumente in der users-Collection auflisten.

db.users.find();

Die Ausgabe zeigt nun nur noch zwei Dokumente an, was bestätigt, dass "Jane Smith" entfernt wurde.

Mehrere Dokumente löschen

Im vorherigen Schritt haben Sie ein einzelnes Dokument gelöscht. Nun lernen Sie, wie Sie mit der Methode deleteMany() mehrere Dokumente auf einmal löschen können. Dies ist nützlich für Massenlöschungen, wie z. B. das Bereinigen von Datensätzen mit einem bestimmten Status.

Fügen wir zunächst einige neue Dokumente zu unserer users-Collection hinzu. Diese Dokumente werden ein status-Feld haben, das wir für unsere Massenlöschungsoperation verwenden werden.

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" }
]);

Die Ausgabe bestätigt die Einfügung von vier neuen Dokumenten.

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

Verwenden Sie nun die Methode deleteMany(), um alle Benutzer zu entfernen, deren Status "inactive" ist.

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

Die Ausgabe zeigt, dass drei Dokumente gelöscht wurden.

{ "acknowledged": true, "deletedCount": 3 }
  • deleteMany(): Diese Methode entfernt alle Dokumente, die den Filterkriterien entsprechen.
  • { status: "inactive" }: Dieser Filter zielt auf alle Dokumente ab, bei denen das Feld status den Wert "inactive" hat.

Um die Massenlöschung zu bestätigen, listen Sie alle verbleibenden Dokumente in der Collection auf.

db.users.find();

Die Ausgabe zeigt nur die Dokumente an, die nicht "inactive" waren, und demonstriert damit, dass die Massenlöschung erfolgreich war.

Dokumente anhand von Bedingungen löschen

MongoDB ermöglicht die Verwendung leistungsstarker Abfrageoperatoren, um Dokumente basierend auf komplexeren Bedingungen zu löschen. In diesem Schritt lernen Sie, wie Sie Operatoren wie $gt (größer als) und $lt (kleiner als) für bedingte Löschungen verwenden.

Erstellen wir zunächst eine neue Collection namens employees mit einigen Beispieldaten.

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 }
]);

Die Ausgabe bestätigt die Einfügung von vier Dokumenten.

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

Führen wir nun eine bedingte Löschung durch. Wir werden alle Mitarbeiter entfernen, die älter als 40 Jahre sind.

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

Die Ausgabe zeigt an, dass ein Dokument gelöscht wurde.

{ "acknowledged": true, "deletedCount": 1 }
  • { age: { $gt: 40 } }: Dieser Filter verwendet den $gt-Operator, um Dokumente auszuwählen, bei denen das Feld age größer als 40 ist.

Als Nächstes führen wir eine Löschung basierend auf mehreren Bedingungen durch. Wir werden Mitarbeiter aus der Abteilung "Sales" entfernen, deren Gehalt weniger als 55.000 beträgt.

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

Die Ausgabe bestätigt, dass ein weiteres Dokument gelöscht wurde.

{ "acknowledged": true, "deletedCount": 1 }
  • Dieser Befehl kombiniert zwei Bedingungen: Die department muss "Sales" sein und das salary muss kleiner als 55.000 sein (unter Verwendung des $lt-Operators).

Um die Ergebnisse zu überprüfen, zeigen Sie die verbleibenden Dokumente in der employees-Collection an.

db.employees.find();

Die Ausgabe zeigt nur die beiden Mitarbeiter an, die die Löschkriterien nicht erfüllt haben.

Alle Daten aus einer Collection löschen

Manchmal müssen Sie alle Dokumente aus einer Collection entfernen. MongoDB bietet zwei Hauptmethoden, um dies zu erreichen: die Verwendung von deleteMany({}) zum Entfernen aller Dokumente oder die Verwendung von drop(), um die gesamte Collection zu entfernen.

Erstellen wir zunächst eine neue products-Collection mit einigen Beispieldaten.

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

Methode 1: Alle Dokumente mit deleteMany() entfernen

Sie können alle Dokumente aus einer Collection entfernen, indem Sie einen leeren Filter {} an die Methode deleteMany() übergeben. Dieser Ansatz löscht die Daten, behält aber die Collection selbst bei, einschließlich ihrer Indizes.

db.products.deleteMany({});

Die Ausgabe zeigt, dass alle drei Dokumente gelöscht wurden.

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

Sie können überprüfen, ob die Collection nun leer ist, indem Sie eine find()-Abfrage ausführen.

db.products.find();

Dieser Befehl gibt keine Dokumente zurück.

Methode 2: Die gesamte Collection mit drop() löschen

Die Methode drop() ist destruktiver. Sie entfernt die Collection vollständig, einschließlich aller ihrer Dokumente, Indizes und zugehörigen Metadaten.

Fügen wir zunächst die Beispieldaten erneut ein, damit wir eine Collection zum Löschen haben.

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

Löschen Sie nun die products-Collection vollständig.

db.products.drop();

Die Ausgabe true bestätigt, dass die Collection erfolgreich gelöscht wurde.

true

Wenn Sie nun versuchen, die products-Collection abzufragen, werden keine Ergebnisse zurückgegeben, da die Collection nicht mehr existiert.

db.products.find();

Dieser Befehl erzeugt keine Ausgabe, da die Collection nicht mehr vorhanden ist. Um die mongosh-Shell zu verlassen, können Sie exit eingeben oder Strg+D drücken.

Zusammenfassung

In diesem Lab haben Sie die grundlegenden Techniken zum Löschen von Daten in MongoDB gelernt. Sie haben mit der Methode deleteOne() begonnen, um ein einzelnes Dokument basierend auf einem spezifischen Filter zu entfernen. Anschließend sind Sie zu Massenlöschungen mit deleteMany() übergegangen, die effizient mehrere Dokumente entfernt, die einem Kriterium entsprechen. Sie haben auch untersucht, wie Abfrageoperatoren wie $gt und $lt verwendet werden, um komplexere, bedingte Löschungen durchzuführen. Schließlich haben Sie zwei Methoden zum Leeren einer Collection kennengelernt: die Verwendung von deleteMany({}), um alle Dokumente zu entfernen und die Collection-Struktur beizubehalten, und die Verwendung von drop(), um die gesamte Collection dauerhaft zu entfernen.

Diese Fähigkeiten sind für die Datenbankadministration von entscheidender Bedeutung und ermöglichen es Ihnen, den Datenlebenszyklus zu verwalten, unnötige Datensätze zu bereinigen und die allgemeine Integrität Ihrer MongoDB-Datenbank aufrechtzuerhalten.