Auf einen Blick: MongoDB ist eine skalierbare NoSQL-Datenbank, die JSON-ähnliche Dokumente für flexible Datenspeicherung verwendet. Dieser Leitfaden behandelt seine wichtigsten Merkmale, einschließlich der Kommandozeilen-Shell und Dokumentstruktur, wobei Geschwindigkeit statt Speichereffizienz in den Vordergrund steht.
- Daten werden in Dokumentensammlungen gespeichert, was das Big-Data-Management vereinfacht.
- Unterstützt mehrere Programmiersprachen über verschiedene Treiber, darunter Python und Java.
Hier geben wir einen Überblick über die MongoDB-Datenbank. In den folgenden Beiträgen geben wir ausführlichere Beispiele zur Nutzung von MongoDB.
Erstens ist MongoDB eine NoSQL-Big-Data-Datenbank. Sie entspricht der Definition von Big Data, weil sie skaliert (d. h. vergrößert werden kann) einfach durch das Hinzufügen von mehr Servern zu einem verteilten System. Und sie benötigt kein Schema, wie eine RDBMS-Datenbank wie Oracle.
MongoDB-Datensätze werden im JSON-Format (JavaScript Object Notation) gespeichert, das sich selbst beschreibt, das heißt, die Metadaten (d. h. das Schema) werden zusammen mit den Daten gespeichert.
Mongo verfügt über eine interaktive Befehls-Shell. JavaScript-Programmierer werden das lieben, weil die Syntax JavaScript ist. Um die Shell zu öffnen, tippst du einfach:
mongo
Konzepte
MongoDB-Datensätze werden als Dokumente bezeichnet. Jede MongoDB-Datenbank (Sie können viele haben) enthält Sammlungen, die eine Menge von JSON-Dokumenten sind. Jede Sammlung und jedes Dokument hat eine ObjectID, die von MongoDB erstellt oder vom Programmierer bereitgestellt wird.
Zur Veranschaulichung: Angenommen, wir haben eine Datenbank namens Produkte.
Wir könnten zwei Kollektionen haben, die alle Produkte enthalten und sie nach dem Verkaufsort gruppieren:
| Sammlung | Dokumente und Felder |
|---|---|
| In Europa verkaufte Produkte | EAN (europäischer Barcode), Gewicht in Kilo |
| Produkte, die in den USA verkauft werden | UPC (amerikanischer Barcode), Gewicht in Pfund |
Datenspeicher ist günstig und Speicher und CPU sind teurer. Deshalb werfen einige Big-Data-Datenbanken, wie Cassandra und MongoDB, die Idee einer normalisierten Datenbank in den Sinn, was eines der Schlüsselprinzipien einer RDBMS-Datenbank ist.
Zum Beispiel hätte man mit Oracle eine Produktkategorie in einem Produkteintrag. Die Produktkategorietabelle enthält Felder, die für all diese Produkte gemeinsam sind. Jeder Produkteintrag verweist auf einen Produktkategorie-Datensatz, sodass solche gemeinsamen Daten nicht mehr als einmal gespeichert werden:
| Produkttabelle |
|---|
| Felder: Produktnummer, Produktkategorie |
| Produktkategorietabelle |
|---|
| Felder: Produktkategorie, Gewicht, Farbe |
Aber dann muss man eine Join-Operation durchführen, wenn man die Farbe oder das Gewicht eines Produkts wissen will. Ein Join ist jedoch ein rechenintensiver Vorgang. Das braucht Zeit. MongoDB würde die Daten so speichern:
| Produktdokumente |
|---|
| Felder: Produktnummer, Produktkategorie, Gewicht, Farbe |
RDBMS-Programmierer sagen, dass das Duplikationen erzeugt und Platz verschwendet. MongoDB-Programmierer würden "ja" sagen, aber Geschwindigkeit ist wichtiger als Speicher.
Mit anderen Worten, MongoDB-Datensätze könnten so aussehen:
| Produkt 1 | Kategorie Jungenwindeln klein | Farbe Blau |
| Produkt 2 | Kategorie Jungenwindeln groß | Farbe Blau |
| Produkt 3 | Kategorie Mädchenwindeln klein | Farbe Pink |
Offensichtlich. Wenn man die Kategorie kennt, kennt man die Farbe.
Das werden wir veranschaulichen, indem wir die Produktdatenbank erstellen und dort einige Produkte hinzufügen. Fügen Sie diese Befehle in die MongoDB-Shell ein.
Erstelle zuerst die Produktdatenbank.
use products
switched to db products
Dann diese beiden Sammlungen:
Dann fügen Sie einige Daten hinzu:
> db.createCollection("boyDiapers")
{ "ok" : 1 }
> db.createCollection("girlDiapers")
{ "ok" : 1 }
>
Dann fügen Sie einige Daten hinzu:
db.boyDiapers.insert([
{
size: 1,
color: 'blue',
brand: 'toddler tyke',
}
])
db.girlDiapers.insert([
{
size: 1,
color: 'pink',
brand: 'little angel',
}
])
Beachten Sie zwei Dinge. Erstens verwenden wir das Format db. (collection). einfügen, um das Dokument hinzuzufügen. Zweitens verwenden wir die Klammern [], die ein Array anzeigen, damit wir mehr als ein Dokument gleichzeitig hinzufügen können.
Erstellen Sie nun weitere Daten, damit wir nach Daten fragen können:
db.boyDiapers.insert([
{
size: 2,
color: 'white',
brand: 'boy large white'
}
])
db.girlDiapers.insert([
{
size: 2,
color: 'while',
brand: 'girl large'
}
])
Datenauswahl
Wenn du Find ohne Argumente verwendest, listet es alle Dokumente auf. Verwende Pretty, um die Ergebnisse im leicht lesbaren, eingerückten JSON-Format anzuzeigen:
> db.girlDiapers.find().pretty()
{
"_id" : ObjectId("59d1e9d5ccf50b62c5a7af55"),
"size" : 1,
"color" : "pink",
"brand" : "little angel"
}
{
"_id" : ObjectId("59d1f022ccf50b62c5a7af57"),
"size" : 1,
"color" : "while",
"brand" : "girl large"
}
{
"_id" : ObjectId("59d1f565ccf50b62c5a7af59"),
"size" : 2,
"color" : "while",
"brand" : "girl large"
}
Finde alle Mädchenwindeln der Größe 2 – füge Argumente zur Find-Aussage hinzu:
db.girlDiapers.find({"size":2})
{ "_id" : ObjectId("59d1f565ccf50b62c5a7af59"), "size" : 2, "color" : "while", "brand" : "girl large" }
Man konnte nun nicht gleichzeitig in den Windelsammlungen von Jungen und Mädchen suchen. MongoDB macht das nicht. Stattdessen muss man in der Anwendung programmieren, dass man mit einem Treiber programmiert (siehe unten).
Normalisierte Dokumente
Wir haben gerade gesagt, dass es in MongoDB keine Normalisierung gibt, weil Speicher günstig und Rechenleistung teuer ist. Aber man kann Normalisierungsdokumente erstellen.
Zum Beispiel können wir für jedes große Dokument für Mädchen Größe 2 einen Verkaufsnachweis erstellen, wobei das Windelfeld auf das Windelobjekt zeigt. Das könnte in diesem Fall mehr Sinn machen, da Sie nicht möchten, dass die Windelkollektion bei jedem Verkauf um ein Vielfaches größer wird.
db.girlDiapers.insert([
{ "diaper" : ObjectId("59d1f565ccf50b62c5a7af59"),
"price" : 45.2,
"quanity" : 10,
"sku" : "case"
}
])
Kommandozeilen-Shell
MongoDB-Treiber
Natürlich würdest du die Kommandozeilen-Shell wahrscheinlich nicht für eine Anwendung verwenden. Stattdessen würdest du ein Programm schreiben, das mit MongoDB interagiert, indem du einen der vielen verfügbaren Treiber nutzt. Es gibt Treiber für C++, C#, Java, Node.JS, Scala, Python und mehr.
Zum Beispiel, um Python zu verwenden:
sudo pip install pymongo
Dann eine Anfrage nach Windeln in Größe 2 in der Jungen- und Mädchenkollektion:
Ausgaben:
from pymongo import MongoClient
client = MongoClient()
db = client.products
x=db.collection_names()
for i in range(len(x)):
c=x[i]
d = db.get_collection(c)
for e in d.find({"size": 2}):
print(e)
Ausgaben:
{'size': 2.0, 'brand': 'boy large white', 'color': 'white', '_id': ObjectId('59d1f564ccf50b62c5a7af58')}
{'size': 2.0, 'brand': 'girl large', 'color': 'while', '_id': ObjectId('59d1f565ccf50b62c5a7af59')}
Im nächsten Beitrag werden wir auf einige fortgeschrittenere MongoDB-Themen eingehen.
MongoDB-Leitfaden
- MongoDB-Überblick: Einstieg mit MongoDB
- Wie man MongoDB auf Ubuntu und Mac installiert
- Erstellung einer Datenbank in MongoDB
- MongoDB Shell Grundbefehle
- MongoDB Compass: Nutzung der Mongo GUI
- MongoDB rollenbasierte Zugriffskontrolle (RBAC) erklärt
- MongoDB-Projektion und Projektionsoperatoren erklärt
- MongoDB-Aggregatfunktionen erklärt
- MongoDB-Sortierung: sort()-Methode & Beispiele
- Verwendung von Push-and-Pull-Operatoren in MongoDB
- Wie man MongoDB $unwind
- 23 Gängige MongoDB-Abfrageoperatoren und deren Verwendung
- MongoDB GeoLocation-Abfragebeispiele
- Einführung in MongoDB-Transaktionen
- MongoDB-Indizes: Top-Indextypen und deren Verwaltung
- Die wichtigsten MongoDB-Befehle, die du kennen solltest
- MongoDB-Replikation: Eine vollständige Einführung
- Wie man einen MongoDB-Cluster einrichtet
- MongoDB Sharding: Konzepte, Beispiele & Tutorials
- MongoDB Atlas: Einrichtung und Nutzung von verwaltetem MongoDB
- Wie man MongoDB als Docker-Container ausführt
- MongoDB-Speichernutzung, Verwaltung und Anforderungen
- Wie man Mongodump für MongoDB-Backups verwendet
- Mongorestore-Beispiele zur Wiederherstellung von MongoDB-Backups
- Wie man PyMongo benutzt
- Wie man Mongoose für MongoDB und NodeJS verwendet
- MongoDB Spickzettel
- MongoDB vs Cassandra: NoSQL-Datenbanken im Vergleich
- PostgreSQL vs MongoDB: Vergleich von Datenbanken
- MySQL vs. MongoDB: Vergleich von Datenbanken
- MongoDB-Zertifizierungen: Eine Einführung
Diese Beiträge sind meine eigenen und spiegeln nicht unbedingt die Position, Strategien oder Meinung von BMC wider.