Grundlegende MongoDB-Abfragen schreiben

MongoDBMongoDBBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab lernst du, wie du grundlegende MongoDB-Abfragen schreibst, einschließlich des Findens aller Dokumente, der Ausführen von exakten Übereinstimmungen, der Verwendung von Abfrageoperatoren, der Auswahl von bestimmten Feldern und der Formatierung der Abfrageausgabe. Du wirst beginnen, indem du alle Dokumente aus einer MongoDB-Sammlung mit der find()-Methode abrufen, und dann auf fortgeschrittene Techniken wie das Abfragen von exakten Übereinstimmungen, die Verwendung von Abfrageoperatoren und die Anpassung der Ausgabe übergehen. Am Ende dieses Labs wirst du eine solide Vorstellung von den grundlegenden Fähigkeiten haben, die für die Arbeit mit MongoDB-Datenbanken erforderlich sind.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL mongodb(("MongoDB")) -.-> mongodb/BasicOperationsGroup(["Basic Operations"]) mongodb(("MongoDB")) -.-> mongodb/QueryOperationsGroup(["Query Operations"]) mongodb/BasicOperationsGroup -.-> mongodb/start_mongodb_shell("Start MongoDB Shell") mongodb/BasicOperationsGroup -.-> mongodb/insert_document("Insert Document") mongodb/QueryOperationsGroup -.-> mongodb/find_documents("Find Documents") mongodb/QueryOperationsGroup -.-> mongodb/query_with_conditions("Query with Conditions") mongodb/QueryOperationsGroup -.-> mongodb/sort_documents("Sort Documents") mongodb/QueryOperationsGroup -.-> mongodb/project_fields("Project Fields") subgraph Lab Skills mongodb/start_mongodb_shell -.-> lab-420824{{"Grundlegende MongoDB-Abfragen schreiben"}} mongodb/insert_document -.-> lab-420824{{"Grundlegende MongoDB-Abfragen schreiben"}} mongodb/find_documents -.-> lab-420824{{"Grundlegende MongoDB-Abfragen schreiben"}} mongodb/query_with_conditions -.-> lab-420824{{"Grundlegende MongoDB-Abfragen schreiben"}} mongodb/sort_documents -.-> lab-420824{{"Grundlegende MongoDB-Abfragen schreiben"}} mongodb/project_fields -.-> lab-420824{{"Grundlegende MongoDB-Abfragen schreiben"}} end

Alle Dokumente finden

In diesem Schritt lernst du, wie du alle Dokumente aus einer MongoDB-Sammlung mit der find()-Methode abrufst. Dies ist eine grundlegende Fähigkeit für die Arbeit mit MongoDB-Datenbanken.

Zunächst starten wir die MongoDB-Shell und erstellen eine Beispiel-Datenbank mit einigen zu bearbeitenden Dokumenten:

mongosh

Sobald wir in der MongoDB-Shell sind, erstellen wir eine neue Datenbank und fügen einige Beispiel-Daten hinzu:

use bookstore
db.books.insertMany([
    { title: "Python Basics", author: "John Smith", year: 2022 },
    { title: "MongoDB Essentials", author: "Jane Doe", year: 2023 },
    { title: "Web Development", author: "Alice Johnson", year: 2021 }
])

Um nun alle Dokumente in der books-Sammlung zu finden, verwenden wir die find()-Methode ohne Parameter:

db.books.find();

Du solltest eine Ausgabe ähnlich der folgenden sehen:

[
  {
    _id: ObjectId("..."),
    title: 'Python Basics',
    author: 'John Smith',
    year: 2022
  },
  {
    _id: ObjectId("..."),
    title: 'MongoDB Essentials',
    author: 'Jane Doe',
    year: 2023
  },
  {
    _id: ObjectId("..."),
    title: 'Web Development',
    author: 'Alice Johnson',
    year: 2021
  }
]

Zergliedern wir, was passiert ist:

  • use bookstore erstellt oder wechselt zur bookstore-Datenbank
  • db.books.insertMany() fügt mehrere Dokumente zur books-Sammlung hinzu
  • db.books.find() ruft alle Dokumente in der Sammlung ab

Wenn du eine lesbarere Ausgabe möchtest, kannst du pretty() verwenden:

db.books.find().pretty();

Dies formatiert die Ausgabe mit Zeilenumbrüchen und Einrückungen, was das Lesen erleichtert.

Exakte Übereinstimmungen abfragen

In diesem Schritt lernst du, wie du in MongoDB-Abfragen exakte Übereinstimmungen durchführst. Auf Grundlage des vorherigen Schritts werden wir weiterhin unsere bookstore-Datenbank verwenden, um das präzise Abrufen von Dokumenten zu demonstrieren.

Stellen Sie zunächst sicher, dass Sie in der MongoDB-Shell sind und die bookstore-Datenbank verwenden:

use bookstore

Um Dokumente mit einer exakten Übereinstimmung für ein bestimmtes Feld zu finden, verwenden Sie die find()-Methode mit einem Abfrageobjekt. Finden wir ein Buch anhand seines exakten Titels:

db.books.find({ title: "Python Basics" });

Diese Abfrage wird nur das Dokument zurückgeben, bei dem der Titel genau mit "Python Basics" übereinstimmt. Sie sollten eine Ausgabe wie folgende sehen:

[
  {
    _id: ObjectId("..."),
    title: 'Python Basics',
    author: 'John Smith',
    year: 2022
  }
]

Lassen Sie uns nun eine exakte Übereinstimmung für ein anderes Feld versuchen - den Autor:

db.books.find({ author: "Jane Doe" });

Sie können auch mehrere exakte Übereinstimmungsbedingungen kombinieren, um Ihre Suche einzuschränken:

db.books.find({
  title: "MongoDB Essentials",
  author: "Jane Doe"
});

Diese Abfrage wird Dokumente zurückgeben, die sowohl den Titel als auch den Autor genau übereinstimmen.

Lassen Sie uns ein weiteres Beispiel mit dem year-Feld untersuchen:

db.books.find({ year: 2022 });

Wichtige Hinweise zu exakten Übereinstimmungen:

  • Die Übereinstimmung ist groß-/kleinschreibungssensitiv
  • Das gesamte Feld muss genau übereinstimmen
  • Die Reihenfolge und die exakte Schreibweise spielen eine Rolle

Wenn Sie wissen möchten, wie viele Dokumente Ihrer Abfrage entsprechen, verwenden Sie countDocuments():

db.books.countDocuments({ year: 2022 });

Query-Operatoren verwenden

In diesem Schritt lernst du, wie du MongoDB-Query-Operatoren verwendest, um komplexere und flexiblere Abfragen durchzuführen. Query-Operatoren ermöglichen es dir, fortgeschrittene Filter zu erstellen, die über exakte Übereinstimmungen hinausgehen.

Stellen Sie zunächst sicher, dass Sie in der MongoDB-Shell sind und die bookstore-Datenbank verwenden:

use bookstore

Fügen wir noch ein paar Bücher zu unserer Sammlung hinzu, um verschiedene Operatoren zu demonstrieren:

db.books.insertMany([
  { title: "Advanced Python", author: "John Smith", year: 2020, price: 39.99 },
  {
    title: "Data Science Handbook",
    author: "Jane Doe",
    year: 2019,
    price: 45.5
  },
  {
    title: "Machine Learning Basics",
    author: "Alice Johnson",
    year: 2021,
    price: 55.25
  }
]);

Lassen Sie uns einige häufige Query-Operatoren erkunden:

  1. Greater Than ($gt) und Less Than ($lt) Operatoren:
    Finden Sie Bücher, die nach 2020 veröffentlicht wurden:
db.books.find({ year: { $gt: 2020 } });

Finden Sie Bücher, die vor 2020 veröffentlicht wurden:

db.books.find({ year: { $lt: 2020 } });
  1. Greater Than or Equal To ($gte) und Less Than or Equal To ($lte) Operatoren:
    Finden Sie Bücher, die im Jahr 2020 oder danach veröffentlicht wurden:
db.books.find({ year: { $gte: 2020 } });
  1. Not Equal ($ne) Operator:
    Finden Sie Bücher, die nicht von John Smith geschrieben wurden:
db.books.find({ author: { $ne: "John Smith" } });
  1. In ($in) Operator:
    Finden Sie Bücher von bestimmten Autoren:
db.books.find({ author: { $in: ["John Smith", "Jane Doe"] } });
  1. Not In ($nin) Operator:
    Finden Sie Bücher, die nicht von diesen Autoren geschrieben wurden:
db.books.find({ author: { $nin: ["John Smith", "Jane Doe"] } });
  1. Mehrere Bedingungen:
    Kombinieren Sie Operatoren für komplexere Abfragen:
db.books.find({
  year: { $gte: 2020 },
  price: { $lt: 50 }
});

Diese Abfrage findet Bücher, die im Jahr 2020 oder danach veröffentlicht wurden und einen Preis von weniger als 50 haben.

Spezifische Felder auswählen

In diesem Schritt lernst du, wie du nur spezifische Felder aus Ihren MongoDB-Dokumenten auswählst und projizierst. Dies ist nützlich, wenn du nur die Informationen benötigst, die du brauchst, um die Datenübertragung zu reduzieren und die Abfrageleistung zu verbessern.

Stellen Sie zunächst sicher, dass Sie in der MongoDB-Shell sind und die bookstore-Datenbank verwenden:

use bookstore
  1. Spezifische Felder auswählen:
    Um nur bestimmte Felder auszuwählen, verwenden Sie das zweite Argument in der find()-Methode:
db.books.find({}, { title: 1, author: 1, _id: 0 });

Zergliedern der Abfrage:

  • Das erste Argument {} bedeutet keine Filterung (wählen Sie alle Dokumente aus)
  • Das zweite Argument gibt an, welche Felder eingeschlossen werden sollen
  • 1 bedeutet, dass das Feld eingeschlossen werden soll
  • _id: 0 exkludiert explizit das standardmäßige _id-Feld

Sie sollten eine Ausgabe wie folgende sehen:

[
  { title: 'Python Basics', author: 'John Smith' },
  { title: 'MongoDB Essentials', author: 'Jane Doe' },
...
]
  1. Kombinieren von Feldauswahl mit Filterung:
    Sie können die Feldauswahl mit Abfragebedingungen kombinieren:
db.books.find({ year: { $gt: 2020 } }, { title: 1, year: 1, _id: 0 });

Diese Abfrage findet Bücher, die nach 2020 veröffentlicht wurden, und gibt nur ihre Titel und Jahre zurück.

  1. Felder ausschließen:
    Sie können auch bestimmte Felder ausschließen:
db.books.find({}, { price: 0 });

Dies gibt alle Felder außer dem price-Feld zurück.

  1. Projizieren von geschachtelten Feldern:
    Wenn Sie geschachtelte Dokumente haben, können Sie spezifische geschachtelte Felder auswählen:
// Unter der Annahme einer komplexeren Dokumentstruktur
db.books.find({}, { "author.name": 1, title: 1, _id: 0 });

Wichtige Hinweise:

  • Sie können in einer einzelnen Projection keine Inclusion und Exclusion mischen (außer für _id)
  • _id wird standardmäßig eingeschlossen, es sei denn, es wird explizit auf 0 gesetzt
  • Projections helfen, die Menge an übertragenen Daten zu reduzieren

Abfrageausgabe formatieren

In diesem Schritt lernst du, wie du die Ausgabe von MongoDB-Abfragen formatierst und manipuliert, um deine Ergebnisse lesbarer und nützlicher zu machen.

Stellen Sie zunächst sicher, dass Sie in der MongoDB-Shell sind und die bookstore-Datenbank verwenden:

use bookstore
  1. Schönes Ausgeben:
    Verwende .pretty(), um die Ausgabe mit Einrückungen zu formatieren:
db.books.find().pretty();
  1. Ergebnisse einschränken:
    Verwende .limit(), um die Anzahl der zurückgegebenen Dokumente einzuschränken:
db.books.find().limit(2);
  1. Ergebnisse sortieren:
    Verwende .sort(), um deine Dokumente zu ordnen. Das Argument ist ein Objekt, das das Feld und die Sortierrichtung angibt:
// Sortiere nach Jahr aufsteigend
db.books.find().sort({ year: 1 });

// Sortiere nach Jahr absteigend
db.books.find().sort({ year: -1 });
  1. Methoden kombinieren:
    Du kannst mehrere Formatierungsmethoden verkettieren:
db.books
  .find()
  .sort({ year: -1 }) // Sortiere nach Jahr absteigend
  .limit(3) // Hole die ersten 3 Ergebnisse
  .pretty(); // Formatieren Sie schön
  1. Dokumente überspringen:
    Verwende .skip(), um eine bestimmte Anzahl von Dokumenten zu überspringen:
// Überspringe die ersten 2 Dokumente
db.books.find().skip(2).limit(2);
  1. Dokumente zählen:
    Verwende .count() oder countDocuments(), um die Gesamtzahl der übereinstimmenden Dokumente zu erhalten:
// Zähle alle Bücher
db.books.countDocuments();

// Zähle Bücher, die nach 2020 veröffentlicht wurden
db.books.countDocuments({ year: { $gt: 2020 } });

Praktisches Beispiel:
Lassen Sie uns mehrere Formatierungstechniken kombinieren:

db.books
  .find({ year: { $gte: 2020 } })
  .sort({ price: 1 }) // Sortiere nach Preis aufsteigend
  .limit(2) // Hole die 2 günstigsten Bücher nach 2020
  .pretty();

Zusammenfassung

In diesem Labyrinth lernst du, wie du grundlegende MongoDB-Abfragen durchführst, einschließlich des Findens aller Dokumente in einer Sammlung, des Abfragens nach exakten Übereinstimmungen, des Einsatzes von Query-Operatoren, des Auswählens von spezifischen Feldern und der Formatierung der Abfrageausgabe. Du wirst beginnen, indem du lernst, wie du alle Dokumente aus einer MongoDB-Sammlung mithilfe der find()-Methode abrufst, was eine grundlegende Fähigkeit für die Arbeit mit MongoDB-Datenbanken ist. Anschließend wirst du erkunden, wie du in MongoDB-Abfragen exakte Übereinstimmungen durchführst, was es dir ermöglicht, Dokumente mit bestimmten Feldwerten abzurufen. Im Laufe des Labyrinths wirst du ein solides Verständnis der wesentlichen MongoDB-Abfragetechniken erlangen.