MongoDB Daten exportieren

MongoDBBeginner
Jetzt üben

Einführung

In diesem Lab lernen Sie, wie Sie das Befehlszeilen-Dienstprogramm mongoexport verwenden, um Daten aus einer MongoDB-Datenbank zu exportieren. Sie werden das Exportieren von Daten in zwei gängige Formate üben: JSON und CSV. Das Lab führt Sie durch die Erstellung eines Beispieldatensatzes, den Export einer gesamten Collection, die Auswahl spezifischer Felder für den Export und die Verwendung von Abfragen zur Filterung der exportierten Daten. Am Ende dieses Labs werden Sie in der Lage sein, Daten aus MongoDB für Backups, Analysen oder Migrationen in andere Systeme zu extrahieren.

Exportieren einer Collection nach JSON

In diesem ersten Schritt lernen Sie den grundlegenden Prozess des Exports einer MongoDB-Collection in eine JSON-Datei. JSON (JavaScript Object Notation) ist ein Standardformat, das die reichhaltige, verschachtelte Struktur von MongoDB-Dokumenten beibehält und es somit ideal für Backups und Migrationen macht.

Zuerst müssen Sie sich mit dem MongoDB-Server verbinden und einige Beispieldaten erstellen. Öffnen Sie die MongoDB Shell, indem Sie den folgenden Befehl in Ihrem Terminal ausführen:

mongosh

Sobald Sie sich in der MongoDB Shell befinden, sehen Sie eine neue Eingabeaufforderung. Erstellen Sie nun eine neue Datenbank namens exportlab, wechseln Sie zu dieser und fügen Sie drei Dokumente in eine users-Collection ein.

use exportlab
db.users.insertMany([
  { name: "Alice", age: 28, email: "alice@example.com", status: "active" },
  { name: "Bob", age: 35, email: "bob@example.com", status: "active" },
  { name: "Charlie", age: 42, email: "charlie@example.com", status: "inactive" }
]);

Nachdem die Dokumente eingefügt wurden, sehen Sie eine Bestätigungsnachricht. Beenden Sie nun die MongoDB Shell, um zu Ihrem normalen Terminal zurückzukehren.

exit;

Nachdem die Daten vorhanden sind, können Sie nun das Dienstprogramm mongoexport verwenden, um die users-Collection zu exportieren. Dieser Befehl gibt die Datenbank, die Collection und die Ausgabedatei an.

mongoexport --db=exportlab --collection=users --out=$HOME/project/users.json
  • --db: Gibt die zu verbindende Datenbank an (exportlab).
  • --collection: Gibt die zu exportierende Collection an (users).
  • --out: Gibt den Pfad und Dateinamen für die Ausgabedatei an ($HOME/project/users.json).

Um den erfolgreichen Export zu bestätigen, zeigen Sie den Inhalt der neu erstellten JSON-Datei an.

cat ~/project/users.json

Sie sehen die drei eingefügten Dokumente, jeweils in einer neuen Zeile im JSON-Format. Dieses Format wird JSONL (JSON Lines) genannt, wobei jede Zeile ein separates, vollständiges JSON-Objekt enthält. Beachten Sie, dass MongoDB jedem Dokument ein eindeutiges Feld _id hinzufügt.

{"_id":{"$oid":"656f1a6b..."},"name":"Alice","age":28,"email":"alice@example.com","status":"active"}
{"_id":{"$oid":"656f1a6b..."},"name":"Bob","age":35,"email":"bob@example.com","status":"active"}
{"_id":{"$oid":"656f1a6b..."},"name":"Charlie","age":42,"email":"charlie@example.com","status":"inactive"}

Exportieren einer Collection nach CSV

Während JSON hervorragend geeignet ist, um die Datenstruktur zu erhalten, ist CSV (Comma-Separated Values) oft praktischer für die Verwendung in Tabellenkalkulationen oder für den einfachen Datenaustausch. In diesem Schritt exportieren Sie dieselbe users-Collection in eine CSV-Datei.

Beim Export nach CSV müssen Sie angeben, welche Felder einbezogen werden sollen. Dies liegt daran, dass CSV ein flaches, tabellarisches Format ist und keine verschachtelten JSON-Strukturen darstellen kann.

Verwenden Sie erneut den Befehl mongoexport, fügen Sie diesmal jedoch die Optionen --type=csv und --fields hinzu. Wir werden die Felder name, age und email exportieren.

mongoexport --db=exportlab --collection=users --type=csv --fields=name,age,email --out=$HOME/project/users.csv
  • --type=csv: Dieses Flag weist mongoexport an, im CSV-Format auszugeben.
  • --fields: Eine durch Kommas getrennte Liste von Feldern, die in den Export aufgenommen werden sollen. Die Reihenfolge, in der Sie sie hier auflisten, bestimmt die Spaltenreihenfolge in der CSV-Datei.

Untersuchen Sie nun den Inhalt der Datei users.csv.

cat ~/project/users.csv

Die Ausgabe ist ein Standard-CSV-Format, wobei die Feldnamen die Kopfzeile bilden, gefolgt von den Daten.

name,age,email
Alice,28,alice@example.com
Bob,35,bob@example.com
Charlie,42,charlie@example.com

Sie haben nun dieselben Daten erfolgreich in zwei verschiedene Formate exportiert.

Filtern von Daten mit einer Abfrage

Oftmals müssen Sie nicht die gesamte Collection exportieren. mongoexport ermöglicht es Ihnen, eine Abfrage zu verwenden, um zu filtern, welche Dokumente exportiert werden. Dies ist nützlich, um spezifische Teilmengen Ihrer Daten zu extrahieren.

In diesem Schritt exportieren Sie nur die Benutzer, deren status "active" ist. Die Option --query akzeptiert ein JSON-Dokument, das die Filterkriterien angibt, genau wie eine find()-Operation in der MongoDB Shell.

Führen Sie den folgenden Befehl aus, um nur die aktiven Benutzer in eine neue JSON-Datei namens active_users.json zu exportieren.

mongoexport --db=exportlab --collection=users --query='{"status": "active"}' --out=$HOME/project/active_users.json
  • --query='{"status": "active"}': Diese Option filtert die Dokumente und exportiert nur diejenigen, bei denen das Feld status gleich "active" ist. Beachten Sie die Verwendung von einfachen Anführungszeichen um den JSON-String, um Probleme bei der Interpretation durch die Shell zu vermeiden.

Überprüfen wir den Inhalt der exportierten Datei.

cat ~/project/active_users.json

Die Ausgabe sollte nur die Dokumente für Alice und Bob enthalten, da Charlies Status "inactive" ist.

{"_id":{"$oid":"656f1a6b..."},"name":"Alice","age":28,"email":"alice@example.com","status":"active"}
{"_id":{"$oid":"656f1a6b..."},"name":"Bob","age":35,"email":"bob@example.com","status":"active"}

Diese Filterfunktion ist leistungsstark für die Erstellung gezielter Datenexporte, ohne dass die Daten nach dem Export manipuliert werden müssen.

Formatieren und Begrenzen der Ausgabe

mongoexport bietet zusätzliche Optionen zur Steuerung des Formats und der Datenmenge, die Sie exportieren. In diesem Schritt lernen Sie, wie Sie eine besser lesbare "pretty" JSON-Ausgabe erstellen und wie Sie die Anzahl der Dokumente in Ihrem Export begrenzen.

Zuerst exportieren wir die users-Collection erneut, aber diesmal mit dem Flag --pretty. Dies formatiert die JSON-Ausgabe mit Einrückungen und Zeilenumbrüchen, was sie wesentlich lesbarer macht.

mongoexport --db=exportlab --collection=users --pretty --out=$HOME/project/users_pretty.json
  • --pretty: Formatiert die Ausgabe-JSON, um sie für Menschen lesbar zu machen.

Sehen Sie sich die formatierte Datei an, um den Unterschied zu erkennen.

cat ~/project/users_pretty.json

Die Ausgabe wird schön eingerückt sein, wie folgt:

[
  {
    "_id": {
      "$oid": "656f1a6b..."
    },
    "name": "Alice",
    "age": 28,
    "email": "alice@example.com",
    "status": "active"
  },
  {
    "_id": {
      "$oid": "656f1a6b..."
    },
    "name": "Bob",
    "age": 35,
    "email": "bob@example.com",
    "status": "active"
  },
  {
    "_id": {
      "$oid": "656f1a6b..."
    },
    "name": "Charlie",
    "age": 42,
    "email": "charlie@example.com",
    "status": "inactive"
  }
]

Als Nächstes verwenden Sie die Option --limit, um nur eine bestimmte Anzahl von Dokumenten zu exportieren. Dies ist nützlich für die Erstellung kleiner Beispieldateien oder für Tests. Exportieren wir nur die ersten beiden Dokumente in eine CSV-Datei.

mongoexport --db=exportlab --collection=users --type=csv --fields=name,status --limit=2 --out=$HOME/project/users_limited.csv
  • --limit=2: Beschränkt den Export auf maximal 2 Dokumente.

Überprüfen Sie den Inhalt der begrenzten CSV-Datei.

cat ~/project/users_limited.csv

Wie erwartet enthält die Datei die Kopfzeile und nur die ersten beiden Benutzereinträge.

name,status
Alice,active
Bob,active

Überprüfung exportierter Dateien

In diesem letzten Schritt üben Sie die Verwendung gängiger Linux-Befehlszeilentools zur Inspektion und Überprüfung der von Ihnen erstellten Dateien. Dies ist eine entscheidende Fähigkeit, um die Integrität Ihrer Datenexporte zu bestätigen.

Listen Sie zunächst alle Dateien in Ihrem Projektverzeichnis auf, um alles zu sehen, was Sie erstellt haben. Die Flags -lh zeigen Details in einem für Menschen lesbaren Format an.

ls -lh ~/project/

Sie sollten alle .json- und .csv-Dateien aus den vorherigen Schritten sehen.

total 20K
-rw-rw-r-- 1 labex labex 224 Aug 27 15:48  active_users.json
-rw-rw-r-- 1 labex labex  96 Aug 27 15:48  users.csv
-rw-rw-r-- 1 labex labex 344 Aug 27 15:36  users.json
-rw-rw-r-- 1 labex labex  36 Aug 27 15:48  users_limited.csv
-rw-rw-r-- 1 labex labex 410 Aug 27 15:48  users_pretty.json

Verwenden Sie als Nächstes den Befehl wc -l, um die Anzahl der Zeilen in Ihren Dateien zu zählen. Dies ist eine schnelle Möglichkeit, die Anzahl der exportierten Dokumente zu überprüfen.

wc -l ~/project/*.json ~/project/*.csv

Bei JSON-Dateien, bei denen jedes Dokument in einer Zeile steht, entspricht die Zeilenanzahl der Dokumentenanzahl. Bei CSV-Dateien ist die Zeilenanzahl die Anzahl der Datenzeilen plus eine für die Kopfzeile.

  2 /home/labex/project/active_users.json
  3 /home/labex/project/users.json
27 /home/labex/project/users_pretty.json
  4 /home/labex/project/users.csv
  3 /home/labex/project/users_limited.csv
39 total

Schließlich können Sie die Syntax von JSON-Dateien validieren. Beachten Sie, dass mongoexport standardmäßig das JSONL (JSON Lines)-Format erstellt, bei dem jedes Dokument ein separates JSON-Objekt in einer eigenen Zeile ist. Um dieses Format zu validieren, können Sie jede Zeile einzeln überprüfen:

while IFS= read -r line; do
  echo "$line" | python3 -m json.tool > /dev/null
done < ~/project/users.json && echo "All JSON lines are valid"

Wenn die Befehle ohne Fehler ausgeführt werden, sind Ihre JSON-Dateien gültig. Diese Verifizierungstechniken helfen sicherzustellen, dass Ihre Datenexporte vollständig und korrekt sind.

Zusammenfassung

In diesem Lab haben Sie die wesentlichen Funktionen des mongoexport-Dienstprogramms kennengelernt. Sie haben mit der Erstellung eines Beispieldatensatzes begonnen und einen grundlegenden Export in eine JSON-Datei durchgeführt. Anschließend haben Sie dieselben Daten in eine CSV-Datei exportiert und dabei gelernt, wie Sie mit --fields Felder für ein tabellarisches Format angeben. Sie haben auch die Option --query geübt, um Daten zu filtern und nur eine bestimmte Teilmenge von Dokumenten zu exportieren. Schließlich haben Sie Formatierungsoptionen wie --pretty für menschenlesbares JSON und --limit zur Steuerung der Anzahl der exportierten Datensätze erkundet. Durch diese Übungen haben Sie praktische Fähigkeiten zur Extraktion von Daten aus MongoDB für verschiedene Zwecke erworben.