Einführung
In diesem Lab lernen Sie, wie Sie Daten in MongoDB mithilfe der leistungsstarken Aggregations-Pipeline transformieren. Die Aggregations-Pipeline ermöglicht es Ihnen, Daten durch eine Reihe von Stufen zu verarbeiten, was komplexe Transformationen, Analysen und Berichte ermöglicht. Sie beginnen mit dem Einrichten eines Beispieldatensatzes und durchlaufen dann mehrere wichtige Transformationstechniken, darunter das Auswählen und Umbenennen von Feldern, das Berechnen neuer Felder aus vorhandenen Daten, das Formatieren der Ausgabe und das Filtern von Dokumenten basierend auf spezifischen Kriterien. Am Ende dieses Labs werden Sie eine solide Grundlage für die Datenmanipulation in MongoDB haben.
Einrichtung und grundlegende Feldauswahl
In diesem ersten Schritt verbinden Sie sich mit dem MongoDB-Server, erstellen eine Datenbank und eine Collection und fügen einige Beispieldaten ein. Anschließend führen Sie Ihre erste Datentransformation durch, indem Sie spezifische Felder aus den Dokumenten auswählen und umbenennen.
Öffnen Sie zunächst Ihr Terminal und starten Sie die MongoDB Shell (mongosh). Diese interaktive Shell ist die primäre Methode zur Interaktion mit Ihrer MongoDB-Instanz. Sie werden alle Datenbankoperationen in dieser Shell für den Rest des Labs durchführen.
mongosh
Sobald Sie sich in der MongoDB Shell befinden, ändert sich Ihre Eingabeaufforderung. Erstellen und wechseln Sie nun zu einer neuen Datenbank namens bookstore. Wenn die Datenbank nicht existiert, wird sie durch diesen Befehl erstellt.
use bookstore
Erstellen Sie als Nächstes eine Collection namens books und fügen Sie mit dem Befehl insertMany drei Beispieldokumente ein. Eine Collection ist eine Gruppe von Dokumenten, ähnlich einer Tabelle in einer SQL-Datenbank.
db.books.insertMany([
{
title: "MongoDB Basics",
author: "Jane Smith",
price: 29.99,
pages: 250,
categories: ["Database", "Programming"]
},
{
title: "Python Deep Dive",
author: "John Doe",
price: 39.99,
pages: 450,
categories: ["Programming", "Python"]
},
{
title: "Data Science Handbook",
author: "Alice Johnson",
price: 49.99,
pages: 600,
categories: ["Data Science", "Programming"]
}
]);
Nachdem Sie nun Daten haben, verwenden wir die Aggregations-Pipeline, um sie zu transformieren. Die Methode aggregate nimmt ein Array von Stufen entgegen, wobei jede Stufe eine Operation auf den Daten ausführt. Unsere erste Stufe ist $project, die die Dokumente neu formatiert.
Führen Sie den folgenden Befehl aus, um nur die Felder title und author auszuwählen und sie in bookTitle bzw. bookAuthor umzubenennen.
db.books.aggregate([
{
$project: {
_id: 0,
bookTitle: "$title",
bookAuthor: "$author"
}
}
]);
Sie sollten die folgende Ausgabe sehen:
[
{ "bookTitle": "MongoDB Basics", "bookAuthor": "Jane Smith" },
{ "bookTitle": "Python Deep Dive", "bookAuthor": "John Doe" },
{ "bookTitle": "Data Science Handbook", "bookAuthor": "Alice Johnson" }
]
Lassen Sie uns die $project-Stufe aufschlüsseln:
_id: 0schließt das standardmäßige_id-Feld von der Ausgabe aus. Standardmäßig ist es immer enthalten.bookTitle: "$title"erstellt ein neues Feld namensbookTitleund weist ihm den Wert des ursprünglichentitle-Feldes zu. Das$-Präfix zeigt an, dass Sie auf den Wert eines Feldes verweisen.bookAuthor: "$author"benennt dasauthor-Feld auf ähnliche Weise inbookAuthorum.
Berechnung neuer Felder
Im vorherigen Schritt haben Sie bestehende Felder ausgewählt und umbenannt. Nun lernen Sie, wie Sie durch Berechnungen auf vorhandenen Daten völlig neue Felder erstellen. Dazu verwenden Sie die $addFields-Stufe, die Dokumenten neue Felder hinzufügt, ohne die ursprünglichen zu entfernen.
Fügen wir ein neues Feld namens priceWithTax hinzu, das den Preis des Buches inklusive einer 10%igen Steuer berechnet.
db.books.aggregate([
{
$addFields: {
priceWithTax: { $multiply: ["$price", 1.1] }
}
}
]);
Die Ausgabe enthält alle ursprünglichen Felder plus das neue Feld priceWithTax für jedes Dokument:
[
{
_id: ObjectId("..."),
title: 'MongoDB Basics',
author: 'Jane Smith',
price: 29.99,
pages: 250,
categories: [ 'Database', 'Programming' ],
priceWithTax: 32.989
},
{
_id: ObjectId("..."),
title: 'Python Deep Dive',
author: 'John Doe',
price: 39.99,
pages: 450,
categories: [ 'Programming', 'Python' ],
priceWithTax: 43.989
},
{
_id: ObjectId("..."),
title: 'Data Science Handbook',
author: 'Alice Johnson',
price: 49.99,
pages: 600,
categories: [ 'Data Science', 'Programming' ],
priceWithTax: 54.989
}
]
In dieser Pipeline:
$addFieldsist die Stufe, die zum Hinzufügen neuer Felder verwendet wird.priceWithTaxist der Name des neuen Feldes, das Sie erstellen.$multiplyist ein Aggregationsoperator, der ein Array von zwei Zahlen entgegennimmt und diese multipliziert. Hier multipliziert er den Wert desprice-Feldes mit1.1.
Formatierung der Ausgabedaten
Daten sind oft nützlicher, wenn sie richtig formatiert sind. In diesem Schritt lernen Sie, Zeichenketten- und numerische Daten mithilfe verschiedener Aggregationsoperatoren innerhalb einer $project-Stufe zu formatieren. Dies ist nützlich, um Daten für die Anzeige in Anwendungen oder Berichten vorzubereiten.
Erstellen wir eine besser lesbare Ausgabe, indem wir den Buchtitel in Großbuchstaben umwandeln und den Preis als Währungszeichenkette formatieren.
db.books.aggregate([
{
$project: {
_id: 0,
titleUpperCase: { $toUpper: "$title" },
formattedPrice: {
$concat: [{ $literal: "$" }, { $toString: "$price" }]
}
}
}
]);
Die erwartete Ausgabe zeigt die transformierten Daten:
[
{
"titleUpperCase": "MONGODB BASICS",
"formattedPrice": "$29.99"
},
{
"titleUpperCase": "PYTHON DEEP DIVE",
"formattedPrice": "$39.99"
},
{
"titleUpperCase": "DATA SCIENCE HANDBOOK",
"formattedPrice": "$49.99"
}
]
Betrachten wir die in dieser $project-Stufe verwendeten Operatoren:
$toUpper: Dieser Operator wandelt eine Zeichenkette in Großbuchstaben um. Wir haben ihn auf dastitle-Feld angewendet.$concat: Dieser Operator verkettet ein Array von Zeichenketten. Wir haben ihn verwendet, um dem Preis ein Dollarzeichen$voranzustellen.$literal: Dieser Operator wird verwendet, um literale Werte darzustellen, die andernfalls als Ausdrücke interpretiert würden. Hier verwenden wir{ $literal: "$" }, um ein literales Dollarzeichen darzustellen.$toString: Da$concatnur mit Zeichenketten funktioniert, mussten wir zuerst das numerischeprice-Feld mit dem$toString-Operator in eine Zeichenkette umwandeln.
Ergebnisse mit $match filtern
Die letzte grundlegende Technik, die Sie lernen werden, ist das Filtern. Die $match-Stufe ermöglicht es Ihnen, nur die Dokumente auszuwählen, die bestimmte Kriterien erfüllen, ähnlich der WHERE-Klausel in SQL. Sie ist eine der gebräuchlichsten Stufen in einer Aggregationspipeline.
Finden wir alle Bücher, die mehr als 35 $ kosten.
db.books.aggregate([
{
$match: {
price: { $gt: 35 }
}
}
]);
Die Ausgabe enthält nur die beiden Bücher, die dem Filter entsprechen:
[
{
_id: ObjectId("..."),
title: 'Python Deep Dive',
author: 'John Doe',
price: 39.99,
pages: 450,
categories: [ 'Programming', 'Python' ]
},
{
_id: ObjectId("..."),
title: 'Data Science Handbook',
author: 'Alice Johnson',
price: 49.99,
pages: 600,
categories: [ 'Data Science', 'Programming' ]
}
]
Die $match-Stufe verwendet die Standard-MongoDB-Abfragesyntax.
price: { $gt: 35 }gibt die Filterbedingung an. Sie wählt Dokumente aus, bei denen das Feldpricegrößer als ($gt) 35 ist.
Sie können auch Stufen miteinander verketten, um komplexere Pipelines zu erstellen. Sie können beispielsweise zuerst die Dokumente filtern und dann eine benutzerdefinierte Ausgabe aus den Ergebnissen projizieren.
db.books.aggregate([
{
$match: {
price: { $gt: 35 }
}
},
{
$project: {
_id: 0,
title: 1,
price: 1
}
}
]);
Diese Pipeline filtert zuerst nach teuren Büchern mit $match und verwendet dann für diese Ergebnisse $project, um nur den title und price anzuzeigen. Die Syntax title: 1 in $project ist eine Kurzschreibweise, um ein Feld einzuschließen.
Die endgültige Ausgabe ist sowohl gefiltert als auch projiziert:
[
{ "title": "Python Deep Dive", "price": 39.99 },
{ "title": "Data Science Handbook", "price": 49.99 }
]
Um die MongoDB-Shell zu verlassen, können Sie exit eingeben oder Strg+D drücken.
Zusammenfassung
In diesem Lab haben Sie die grundlegenden Operationen der MongoDB Aggregationspipeline kennengelernt. Sie haben mit dem Einfügen von Daten begonnen und dann eine Reihe von Stufen verwendet, um diese zu transformieren. Sie haben das Auswählen und Umbenennen von Feldern mit $project, das Erstellen neuer berechneter Felder mit $addFields, das Ändern des Erscheinungsbilds von Daten mit Formatierungsoperatoren wie $toUpper und $concat sowie das Filtern von Dokumenten mit $match geübt. Durch die Kombination dieser Stufen können Sie ausgefeilte Datenverarbeitungspipelines erstellen, um Ihre Daten direkt in der Datenbank zu analysieren und umzugestalten, was ein leistungsstarker und effizienter Ansatz für die Datenmanipulation ist.

