In diesem Artikel werden wir die Datenbank MongoDB 6 lokal unter Windows mit einem WSL Ubuntu Subsystem installieren. MongoDB ist eine dokumentenbasierte Datenbank, die oft auch als NoSQL-Datenbank bezeichnet wird.
Wenn du nicht weißt, was WSL ist und erfahren möchtest, wie du es einrichten kannst, lese meinen vorherigen Artikel:
Die offizielle WSL-Dokumentation enthält eine Anleitung zur Installation von MongoDB, bezieht sich aber auf MongoDB 5. Wir werden stattdessen mit MongoDB 6 fortfahren.
Installation von MongoDB 6
Öffne zunächst ein neues Terminal Fenster und rufe den von der MongoDB-Paketverwaltung verwendeten öffentlichen Schlüssel ab:
wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -
Erstelle eine Listendatei für MongoDB:
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
Ja, die Leerzeichen in der URL zwischen den Anführungszeichen sind in Ordnung. Daraufhin sollte die Datei /etc/apt/sources.list.d/mongodb-org-6.0.list
existieren und wenn sie korrekt eingerichtet ist, können wir die lokale Paketdatenbank von Aptitude neu laden:
sudo apt-get update
Jetzt sollte das MongoDB-Repository zusammen mit den standardmäßigen Canonical Repositories aufgelistet werden:
...
Get:5 https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 Release [4412 B]
...
Installiere die MongoDB-Pakete aus dem Repository:
sudo apt-get install -y mongodb-org
Nach Beendigung des Befehls verfiziere die Installation und die Versionsnummer:
mongod --version
Die Ausgabe sollte in etwa so aussehen wie folgt:
daniel@DESKTOP:~$ mongod --version
db version v6.0.2
Build Info: {
"version": "6.0.2",
"gitVersion": "94fb7dfc8b974f1f5343e7ea394d0d9deedba50e",
"openSSLVersion": "OpenSSL 1.1.1f 31 Mar 2020",
"modules": [],
"allocator": "tcmalloc",
"environment": {
"distmod": "ubuntu2004",
"distarch": "x86_64",
"target_arch": "x86_64"
}
}
Lege ein neues Verzeichnis zum Speichern der Daten an:
mkdir -p ~/data/db
Starte die MongoDB-Instanz:
sudo mongod --dbpath ~/data/db
Beachte, dass dadurch die aktuelle Shell blockiert wird, bis MongoDB mit der Tastenkombination STRG
+ C
oder der Eingabe von exit
beendet wird. Normalerweise soll die Datenbank im Hintergrund laufen. Ein Nachteil von WSL ist, dass systemd
nicht verfügbar ist. Wir müssen also ein Init Skript einrichten.
Init Skript erstellen
Um ein Init Skript für die Ausführung von MongoDB als Dienst einzurichten, verwenden wir das Skript aus dem MongoDB GitHub Repository. Wir laden das Skript herunter und speichern es in /etc/init.d/
:
curl https://raw.githubusercontent.com/mongodb/mongo/master/debian/init.d | sudo tee /etc/init.d/mongodb >/dev/null
Mache das Skript ausführbar durch Setzen des Berechtigungsflags:
sudo chmod +x /etc/init.d/mongodb
Nun kannst du MongoDB mit folgenden Befehlen starten und stoppen:
sudo service mongodb status
um den Status deiner Datenbank zu checken. Du solltest keinen Fehler als Antwort erhalten wenn deine MongoDB Datenbank läuft.sudo service mongodb start
zum Starten der MongoDB Datenbank. Du solltest die Antwort* Starting database mongod [ OK ]
sehen, wenn die Datenbank erfolgreich gestartet wurde.sudo service mongodb stop
zum Stoppen der MongoDB Datenbank. Du solltest die Antwort* Stopping database mongod [ OK ]
sehen, wenn die Datenbank erfolgreich gestoppt wurde.
Beachte, dass der Dienst nicht das zuvor erstellte Verzeichnis ~/data/db
zum Speichern der Daten verwendet, da wir das Laufzeitargument nicht mehr übergeben. Um das Verzeichnis weiterhin zu verwenden, musst du die Konfigurationsdatei in /etc/mongod.conf
anpassen. Das Standardverzeichnis für die Speicherung ist /var/lib/mongodb/
.
Zur Datenbanken verbinden und sie testen
Prüfe, ob die Datenbank läuft, indem du dich mit der Datenbank verbindest:
mongosh
Wenn MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017
zurückgegeben wird, läuft MongoDB nicht wie erwartet. Ansonsten wirst du verbunden und kannst mit den folgenden Befehlen einen neuen Benutzer mytestuser
für die Datenbank mytestdatabase
erstellen:
use mytestdatabase
db.createUser(
{
user: "mytestuser",
pwd: passwordPrompt(), // or cleartext password
roles: [ { role: "readWrite", db: "test" },
{ role: "read", db: "reporting" } ]
}
)
Du wirst in Folge einmalig nach dem Passwort gefragt und der Benutzer wird mit dem gewählten Passwort angelegt. Gebe anschließend exit
ein, um die MongoDB Shell zu verlassen. Wir melden uns mit dem soeben erstellten Benutzer an:
mongosh -u mytestuser -p --authenticationDatabase mytestdatabase
Daraufhin wirst du nach dem Passwort gefragt, das du vor einer Minute eingegeben hast. Gib das Passwort ein, um dich mit der Datenbank zu verbinden. Als Nächstes verwenden wir wieder unsere Datenbank mytestdatabase
und verwenden ein Beispiel aus der MongoDB Dokumentation für Insertion, um eine neue Collection zu erstellen und Daten einzufügen. Beachte, dass es keine Tabellen wie in SQL-Datenbanken gibt, so dass du keine Tabelle mit definiertem Schema erstellen musst. Als Beispiel fügen wir einen Film in eine Film-Tabelle ein:
db.movies.insertOne(
{
title: "The Favourite",
genres: [ "Drama", "History" ],
runtime: 121,
rated: "R",
year: 2018,
directors: [ "Yorgos Lanthimos" ],
cast: [ "Olivia Colman", "Emma Stone", "Rachel Weisz" ],
type: "movie"
}
)
Die Datenbank antwortet in etwa mit folgender Ausgabe:
{
acknowledged: true,
insertedId: ObjectId("63409e40c9164c75dedfb6d0")
}
Das sagt uns, dass das Objekt erstellt wurde und gibt uns den Objektbezeichner.
Mit dem Befehl show collections
kannst du sehen, dass die Collection movies
erstellt wurde:
mytestdatabase> show collections
movies
Wir lesen nun den speziellen Film, den wir in die Sammlung eingefügt haben, wieder aus:
mytestdatabase> db.movies.find( { title: "The Favourite" } )
[
{
_id: ObjectId("63409e40c9164c75dedfb6d0"),
title: 'The Favourite',
genres: [ 'Drama', 'History' ],
runtime: 121,
rated: 'R',
year: 2018,
directors: [ 'Yorgos Lanthimos' ],
cast: [ 'Olivia Colman', 'Emma Stone', 'Rachel Weisz' ],
type: 'movie'
}
]
Das war's! Unsere MongoDB funktioniert und kann nun für die Entwicklung genutzt werden.