Daten in MongoDB einfügen

MongoDBBeginner
Jetzt üben

Einführung

In diesem Lab lernen Sie die grundlegenden Techniken zum Einfügen von Daten in eine MongoDB-Datenbank. Sie üben das Einfügen einzelner und mehrerer Dokumente, die Behandlung potenzieller Fehler und die Überprüfung der Datenintegrität mithilfe der MongoDB-Shell (mongosh).

Dieses Lab konzentriert sich auf die "Create"-Operation innerhalb von CRUD (Create, Read, Update, Delete). Sie erstellen eine einfache Buchhandlungsdatenbank von Grund auf neu und sammeln praktische Erfahrungen mit wesentlichen Datenverwaltungsaufgaben in einer NoSQL-Umgebung. Am Ende werden Sie ein solides Verständnis dafür haben, wie Sie Daten in MongoDB effektiv hinzufügen und verwalten.

Ein einzelnes Dokument einfügen

In diesem ersten Schritt verbinden Sie sich mit dem MongoDB-Server, erstellen eine Datenbank und eine Collection und fügen Ihr erstes Dokument ein. MongoDB speichert Daten in flexiblen, JSON-ähnlichen Dokumenten, was die Darstellung komplexer Datenstrukturen erleichtert.

Verbinden Sie sich zunächst mit Ihrer lokalen MongoDB-Instanz über die MongoDB Shell. Öffnen Sie Ihr Terminal und führen Sie den folgenden Befehl aus:

mongosh

Sie sehen eine > Eingabeaufforderung, die anzeigt, dass Sie sich nun in der MongoDB Shell befinden und mit der Datenbank verbunden sind.

Wechseln Sie als Nächstes zu einer neuen Datenbank namens bookstore. Wenn die Datenbank nicht existiert, erstellt MongoDB sie für Sie, sobald Sie zum ersten Mal Daten speichern.

use bookstore

Die Ausgabe bestätigt, dass Sie zur Datenbank bookstore gewechselt haben.

switched to db bookstore

Fügen Sie nun ein einzelnes Dokument in eine neue Collection namens books ein. Eine Collection ist eine Gruppe von MongoDB-Dokumenten, die ungefähr einer Tabelle in einer relationalen Datenbank entspricht. Die Methode insertOne() fügt ein einzelnes Dokument zur Collection hinzu.

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

Nach erfolgreichem Einfügen gibt MongoDB ein Dokument zurück, das den Vorgang bestätigt und die eindeutige _id des neu eingefügten Dokuments liefert.

{
  acknowledged: true,
  insertedId: ObjectId("652f8d3e111a2b3c4d5e6f78")
}

Die _id ist ein eindeutiger Bezeichner, der von MongoDB automatisch für jedes Dokument generiert wird und sicherstellt, dass jedes Dokument in einer Collection eindeutig identifiziert werden kann.

Mehrere Dokumente einfügen

Das Einfügen von Dokumenten einzeln kann ineffizient sein. Zum gleichzeitigen Hinzufügen mehrerer Dokumente bietet MongoDB die Methode insertMany(). Dies wird als Bulk-Insert-Operation bezeichnet und reduziert die Anzahl der Netzwerk-Roundtrips zur Datenbank.

In diesem Schritt fügen Sie drei weitere Bücher mit einem einzigen Befehl zu Ihrer books-Collection hinzu. Stellen Sie sicher, dass Sie sich immer noch in der mongosh-Shell befinden und zur bookstore-Datenbank gewechselt haben.

Verwenden Sie die Methode insertMany(), indem Sie ein Array von Dokumentobjekten übergeben.

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

Die Ausgabe bestätigt, dass die Operation bestätigt wurde, und listet die _id-Werte für jedes der drei von Ihnen eingefügten Dokumente auf.

{
  acknowledged: true,
  insertedIds: {
    '0': ObjectId("652f8e3e111a2b3c4d5e6f79"),
    '1': ObjectId("652f8e3e111a2b3c4d5e6f7a"),
    '2': ObjectId("652f8e3e111a2b3c4d5e6f7b")
  }
}

Um zu überprüfen, ob die Dokumente hinzugefügt wurden, können Sie die Gesamtzahl der Dokumente in der Collection zählen.

db.books.countDocuments();

Das Ergebnis sollte 4 sein, was das eine Dokument aus dem vorherigen Schritt und die drei, die Sie gerade hinzugefügt haben, darstellt.

4

Eingefügte Daten abfragen und überprüfen

Nach dem Einfügen von Daten ist der nächste logische Schritt, diese abzurufen und zu untersuchen. Dies ist entscheidend, um zu überprüfen, ob Ihre Daten korrekt gespeichert wurden, und um Anwendungen zu erstellen, die aus der Datenbank lesen. MongoDB bietet hierfür die leistungsstarke find()-Methode.

Um alle Dokumente in der books-Collection abzurufen, verwenden Sie die find()-Methode ohne Argumente.

db.books.find();

Dieser Befehl listet alle vier Dokumente auf, die sich derzeit in Ihrer Collection befinden. Die Ausgabe kann lang sein, aber es ist eine gute Möglichkeit, alles auf einmal zu sehen.

Häufiger möchten Sie Dokumente finden, die bestimmten Kriterien entsprechen. Um alle Bücher zu finden, die vor 1950 veröffentlicht wurden, können Sie einen Abfragefilter mit dem Operator $lt (kleiner als) verwenden.

db.books.find({ year: { $lt: 1950 } });

Diese Abfrage gibt die Dokumente für "The Great Gatsby", "1984" und "Pride and Prejudice" zurück.

Manchmal benötigen Sie nur bestimmte Felder aus den Dokumenten, nicht das gesamte Dokument. Dies wird als Projektion bezeichnet. Um nur den title und author aller Bücher des Genres "Classic" abzurufen, können Sie ein Projektionsdokument als zweites Argument zu find() hinzufügen.

db.books.find({ genres: "Classic" }, { title: 1, author: 1, _id: 0 });

Im Projektionsdokument bedeutet 1 "dieses Feld einschließen" und 0 bedeutet "dieses Feld ausschließen". Standardmäßig ist das Feld _id immer enthalten, daher schließen wir es explizit mit _id: 0 aus.

Die Ausgabe ist eine übersichtliche Liste von Titeln und Autoren:

[
  { "title": "The Great Gatsby", "author": "F. Scott Fitzgerald" },
  { "title": "To Kill a Mockingbird", "author": "Harper Lee" },
  { "title": "Pride and Prejudice", "author": "Jane Austen" }
]

Einfügefehler mit einem Unique Index behandeln

Datenintegrität ist für jede Datenbank von entscheidender Bedeutung. Eine Möglichkeit, diese durchzusetzen, besteht darin, doppelte Einträge zu verhindern. In diesem Schritt lernen Sie, wie Sie einen eindeutigen Index erstellen und beobachten, wie MongoDB versucht, diese Einschränkung zu verletzen.

Stellen Sie sicher, dass keine zwei Bücher in unserer Collection denselben Titel haben können. Erstellen Sie dazu einen eindeutigen Index für das Feld title.

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

Die Ausgabe bestätigt den Namen des erstellten Index.

title_1

Nachdem der eindeutige Index eingerichtet ist, versuchen wir nun, ein Dokument mit einem Titel einzufügen, der bereits in der Collection vorhanden ist, z. B. "1984".

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

Diese Operation schlägt fehl. MongoDB löst eine MongoBulkWriteException mit dem Fehlercode E11000 aus, der auf eine Verletzung des doppelten Schlüssels hinweist. Dies ist das erwartete Verhalten und bestätigt, dass unser eindeutiger Index korrekt funktioniert.

MongoBulkWriteException: E11000 duplicate key error collection: bookstore.books index: title_1 dup key: { title: "1984" }

In einer Anwendung würden Sie solche Datenbankoperationen in einen try...catch-Block einschließen, um diese Fehler ordnungsgemäß zu behandeln, anstatt das Programm abstürzen zu lassen. Sie können dies auch in der mongosh-Shell simulieren.

try {
  db.books.insertOne({
    title: "1984",
    author: "George Orwell"
  });
} catch (e) {
  print("Error inserting document:", e.message);
}

Dieser Befehl fängt die Ausnahme ab und gibt eine benutzerfreundliche Fehlermeldung aus, was eine robuste Methode zur Behandlung möglicher Einfügungsfehler darstellt.

Datenintegrität mit Schema-Validierung erzwingen

Obwohl MongoDB für sein flexibles Schema bekannt ist, können Sie mit der Schema-Validierung eine bestimmte Struktur für Ihre Dokumente erzwingen. Dies stellt sicher, dass alle Dokumente in einer Collection einem definierten Regelwerk entsprechen, was die Datenqualität und -konsistenz verbessert.

In diesem letzten Schritt fügen Sie der books-Collection einen Validator hinzu. Dieser Validator verlangt, dass jedes Dokument einen title, author und year hat, und erzwingt spezifische Datentypen und Bereiche für diese Felder.

Verwenden Sie den Befehl collMod (modify collection), um den Validator hinzuzufügen.

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: 2024,
          description: "must be an integer between 1000 and 2024"
        }
      }
    }
  }
});

Die Ausgabe { ok: 1 } bestätigt, dass der Validator erfolgreich angewendet wurde.

Testen wir nun den Validator, indem wir versuchen, ein Dokument einzufügen, das gegen die Regeln verstößt. Dieses Dokument hat ein year, das außerhalb des zulässigen Bereichs liegt.

db.books.insertOne({
  title: "The Hobbit",
  author: "J.R.R. Tolkien",
  year: 999
});

Die Einfügung schlägt fehl, und MongoDB gibt eine Fehlermeldung zurück, die erklärt, dass das Dokument die Validierung nicht bestanden hat.

MongoBulkWriteException: Document failed validation

Dies bestätigt, dass Ihre Schema-Validierungsregel aktiv ist und die Integrität Ihrer Daten wirksam schützt. Diese leistungsstarke Funktion kombiniert die Flexibilität einer NoSQL-Datenbank mit der Zuverlässigkeit der Datenvalidierung.

Zusammenfassung

In diesem Lab haben Sie die Kerntechniken zum Einfügen von Daten in eine MongoDB-Collection erfolgreich erlernt. Sie haben mit insertOne() ein einzelnes Dokument eingefügt und dann effizient mehrere Dokumente mit der Bulk-Operation insertMany() hinzugefügt.

Sie haben auch geübt, wie Sie Ihre Daten mit find() und countDocuments() abfragen und überprüfen. Am wichtigsten ist, dass Sie zwei Schlüsselmethoden zur Gewährleistung der Datenintegrität erkundet haben: das Erstellen eines eindeutigen Index zur Verhinderung von Duplikaten und die Implementierung der Schema-Validierung zur Erzwingung einer konsistenten Dokumentenstruktur. Diese Fähigkeiten sind grundlegend für den Aufbau robuster und zuverlässiger Anwendungen mit MongoDB.