Aktuell setze ich mich ein wenig mit MongoDB auseinander und habe mir lokal mit Docker eine Test-Installation eingerichtet:
docker run --name mongo -d mongodb/mongodb-community-server:latest
docker exec -it mongo mongosh
Using MongoDB: 7.0.3
Using Mongosh: 2.1.0
test> ...
Je nachdem, wie Sie Docker installiert haben, müssen Sie sudo
vor jedes docker
-Kommando stellen.
Zum Kennenlernen hätte ich nun gerne ein paar Beispieldatenbanken. Und tatsächlich stellt Mongo für sein Cloud-Angebot Atlas eine ganze Palette von Testdatenbanken zur Verfügung. Eine Kurzbeschreibung der Datenbanken finden Sie hier:
https://www.mongodb.com/docs/atlas/sample-data
Genau die Datenbanken hätte ich gerne in meiner lokalen Installation als »Spielwiese«. Leider ist die Installation dieser Beispieldatenbanken bei der lokalen Verwendung von MongoDB umständlich. Auf GitHub gibt es Dumps (Backups) der Beispieldateien im JSON-Format:
git clone https://github.com/mcampo2/mongodb-sample-databases.git
cd mongodb-sample-databases
lstree sample_*
sample_airbnb/
listingsAndReviews.json
sample_analytics/
accounts.json
customers.json
transactions.json
sample_geospatial/
shipwrecks.json
...
Jetzt geht es darum, die Datenbanken zu importieren. Unter Linux oder macOS führen Sie dazu für jede JSON-Datei aus samples_xxx
ein Kommando nach dem folgenden Muster aus:
cat sample_airbnb/listingsAndReviews.json | \
docker exec -i mongo mongoimport --db sample_airbnb --collection listingsAndReviews
Beachten Sie, dass Sie docker exec
mit der Option -i
ausführen müssen (nicht -it
wie bisher für den interaktiven Betrieb), damit die Weitergabe von Daten über den Pipe-Operator |
funktioniert.
Anstatt nun jede JSON-Datei einzeln zu importieren, bietet sich die Formulierung eines winzigen Scripts an. Er richtet für jedes DB-Verzeichnis sample_xxx
eine gleichnamige Datenbank ein und importiert jedes JSON-Dokument als Collection. (Beachten Sie, dass die auf Atlas definierten Indize nicht eingerichtet werden. Wenn Sie zum Testen einen Index brauchen, müssen Sie diesen selbst einrichten.)
#!/bin/sh
for db in sample_*; do
for file in $db/*.json; do
collection="$(basename $file .json)"
cat $file | docker exec -i mongo mongoimport --db $db --collection $collection
done
done
Das Script muss in dem Verzeichnis ausgeführt werden, in dem sich die von GitHub heruntergeladenen sample_xxx
-Verzeichnisse befinden.
Nach dem Import können Sie sich in der Mongo Shell überzeugen, dass alles geklappt hat:
docker exec -it mongo mongosh
test> show dbs
admin 40.00 KiB
config 72.00 KiB
local 40.00 KiB
sample_airbnb 52.09 MiB
sample_analytics 9.39 MiB
sample_geospatial 784.00 KiB
sample_mflix 28.39 MiB
sample_supplies 968.00 KiB
sample_training 61.30 MiB
sample_weatherdata 2.55 MiB
samples_airbnb 52.09 MiB
test 112.00 KiB
test> use sample_airbnb
sample_airbnb> show collections
listingsAndReviews
sample_airbnb> db.listingsAndReviews.findOne()
{
_id: '10009999',
listing_url: 'https://www.airbnb.com/rooms/10009999',
name: 'Horto flat with small garden',
...
}