So importieren und exportieren Sie eine MongoDB-Datenbank unter Ubuntu 20.04

Der Autor hat den COVID-19 Relief Fund dazu ausgewählt, eine Spende im Rahmen des Programms Write for DOnations zu erhalten.

Einführung

MongoDB ist eine der beliebtesten NoSQL-Datenbank-Engines. Es ist berühmt für seine Skalierbarkeit, Leistung, Zuverlässigkeit und Benutzerfreundlichkeit. In diesem Artikel zeigen wir Ihnen, wie Sie Ihre MongoDB-Datenbanken importieren und exportieren.

Wir sollten klarstellen, dass unter Import und Export diejenigen Vorgänge zu verstehen sind, die Daten in einem für Menschen lesbaren Format verarbeiten, das mit anderen Softwareprodukten kompatibel ist. Im Gegensatz dazu erstellen oder verwenden die Sicherungs- und Wiederherstellungsvorgänge MongoDB-spezifische Binärdaten, wodurch die Konsistenz und Integrität Ihrer Daten sowie deren spezifische MongoDB-Attribute erhalten bleiben. Daher ist es für die Migration normalerweise vorzuziehen, Backup und Wiederherstellung zu verwenden, solange das Quell- und das Zielsystem kompatibel sind.

Backup-, Wiederherstellungs- und Migrationsaufgaben gehen über den Rahmen dieses Artikels hinaus. Weitere Informationen finden Sie unter So sichern Sie eine MongoDB-Datenbank unter Ubuntu 20.04.

Voraussetzungen

Um dieses Tutorial zu absolvieren, benötigen Sie Folgendes:

  • Ein Ubuntu 20.04-Droplet, das gemäß dem Ubuntu 20.04-Handbuch zur Ersteinrichtung des Servers eingerichtet wurde, einschließlich eines Sudo-Nicht-Root-Benutzers und einer Firewall.
  • MongoDB installiert und konfiguriert mithilfe des Artikels „Installieren von MongoDB unter Ubuntu 20.04“.
  • Ein Verständnis der Unterschiede zwischen JSON- und BSON-Daten in MongoDB. Für eine ausführliche Diskussion lesen Sie Schritt eins — Verwenden von JSON und JSON in MongoDB in unserem Tutorial zum Sichern, Wiederherstellen und Migrieren einer MongoDB-Datenbank unter Ubuntu 20.04.

Schritt 1 — Importieren von Informationen in MongoDB

Um zu erfahren, wie Informationen in MongoDB importiert werden, verwenden wir eine beliebte Beispiel-MongoDB-Datenbank über Restaurants. Sie ist im .json-Format und kann mit wget wie folgt heruntergeladen werden:

  • wget https://raw.githubusercontent.com/mongodb/docs-assets/primer-dataset/primer-dataset.json

Sobald der Download abgeschlossen ist, sollten Sie eine Datei mit dem Namen primer-dataset.json (12 MB Größe) im aktuellen Verzeichnis haben. Importieren wir die Daten aus dieser Datei in eine neue Datenbank namens newdb und in eine Sammlung mit dem Namen Restaurants.

Verwenden Sie den Befehl mongoimport wie folgt:

  • sudo mongoimport --db newdb --collection restaurants --file primer-dataset.json

Das Ergebnis sieht folgendermaßen aus:

Output2020-11-11T19:37:55.607+0000    connected to: mongodb://localhost/ 2020-11-11T19:37:57.841+0000    25359 document(s) imported successfully. 0 document(s) failed to import 

Wie der obige Befehl zeigt, wurden 25359 Dokumente importiert. Da wir keine Datenbank mit dem Namen newdb haben, hat MongoDB sie automatisch erstellt.

Überprüfen wir den Import.

Stellen Sie eine Verbindung mit der neu erstellten newdb-Datenbank her:

  • sudo mongo newdb

Sie sind nun mit der newdb-Datenbankinstanz verbunden. Beachten Sie, dass sich Ihre Eingabeaufforderung geändert hat, was anzeigt, dass Sie mit der Datenbank verbunden sind.

Zählen Sie die Dokumente in der Sammlung Restaurants mit dem Befehl:

  • db.restaurants.count()

Das Ergebnis zeigt 25359, was die Anzahl importierter Dokumente ist. Für eine noch bessere Überprüfung können Sie das erste Dokument aus der Sammlung Restaurants wie folgt auswählen:

  • db.restaurants.findOne()

Das Ergebnis sieht folgendermaßen aus:

[secondary label Output] {     "_id" : ObjectId("5fac3d937f12c471b3f26733"),     "address" : {         "building" : "1007",         "coord" : [             -73.856077,             40.848447         ],         "street" : "Morris Park Ave",         "zipcode" : "10462"     },     "borough" : "Bronx",     "cuisine" : "Bakery",     "grades" : [         {             "date" : ISODate("2014-03-03T00:00:00Z"),             "grade" : "A",             "score" : 2         }, ...     ],     "name" : "Morris Park Bake Shop",     "restaurant_id" : "30075445" } 

Eine solche detaillierte Überprüfung kann Probleme mit den Dokumenten wie ihrem Inhalt, der Codierung usw. enthüllen. Das Format json verwendet UTF-8-Codierung und Ihre Exporte und Importe sollten in dieser Codierung vorhanden sein. Denken Sie daran, wenn Sie die json-Dateien manuell bearbeiten. Andernfalls verarbeitet MongoDB dies automatisch für Sie.

Um die MongoDB-Eingabeaufforderung zu beenden, geben Sie exit an die Eingabeaufforderung ein:

  • exit

Sie werden als non-root user zur normalen Befehlszeilenaufforderung zurückgegeben.

Schritt 2 — Exportieren von Informationen aus MongoDB

Wie bereits erwähnt, können Sie durch den Export von MongoDB-Informationen eine für Menschen lesbare Textdatei mit Ihren Daten abrufen. Standardmäßig werden Informationen im JSON-Format exportiert. Sie können sie jedoch auch nach CSV exportieren (durch Kommas getrennter Wert).

Um Informationen aus MongoDB zu exportieren, verwenden Sie den Befehl mongoexport. Es ermöglicht Ihnen, einen sehr feinkörnigen Export zu exportieren, sodass Sie eine Datenbank, eine Sammlung, ein Feld und sogar eine Abfrage für den Export angeben können.

Ein einfaches mongoexport-Beispiel wäre die Sammlung Restaurants aus der newdb-Datenbank, die wir zuvor importiert haben. Dies kann wie folgt erfolgen:

  • sudo mongoexport --db newdb -c restaurants --out newdbexport.json

Im obigen Befehl verwenden wir --db, um die Datenbank -c für die Sammlung und --out für die Datei zu spezifizieren, in der die Daten gespeichert werden.

Die Ausgabe eines erfolgreichen mongoexport sollte folgendermaßen aussehen:

Output2020-11-11T19:39:57.595+0000    connected to: mongodb://localhost/ 2020-11-11T19:39:58.619+0000    [###############.........]  newdb.restaurants  16000/25359  (63.1%) 2020-11-11T19:39:58.871+0000    [########################]  newdb.restaurants  25359/25359  (100.0%) 2020-11-11T19:39:58.871+0000    exported 25359 records 

Die obige Ausgabe zeigt, dass 25359 Dokumente importiert wurden, die gleiche Anzahl wie die importierten sind.

In einigen Fällen müssen Sie möglicherweise nur einen Teil Ihrer Sammlung exportieren. Angesichts der Struktur und den Inhalt der Restaurants-json-Datei exportieren wir alle Restaurants, die die Kriterien erfüllen, die sich in der Bronx befinden und chinesische Küche anbieten. Wenn wir diese Informationen direkt während der Verbindung mit MongoDB erhalten möchten, stellen Sie erneut eine Verbindung zur Datenbank her:

  • sudo mongo newdb

Verwenden Sie dann diese Abfrage:

  • db.restaurants.find( { "borough": "Bronx", "cuisine": "Chinese" } )

Die Ergebnisse werden dem Terminal angezeigt:

Output
  • 2020-12-03T01:35:25.366+0000 connected to: mongodb://localhost/
  • 2020-12-03T01:35:25.410+0000 exported 323 records

Um die MongoDB-Eingabeaufforderung zu beenden, geben Sie exit ein:

  • exit

Wenn Sie die Daten von einer sudo-Befehlszeile exportieren möchten, anstatt mit der Datenbank verbunden zu sein, machen Sie die vorherige Abfrage zu einem Teil des mongoexport-Befehls, indem Sie sie für das Argument -q wie folgt angeben:

  • sudo mongoexport --db newdb -c restaurants -q "{"borough": "Bronx", "cuisine": "Chinese"}" --out Bronx_Chinese_retaurants.json

Beachten Sie, dass wir die doppelten Anführungszeichen mit Backslash () in der Abfrage umgehen. Ähnlich müssen Sie alle anderen Sonderzeichen in der Abfrage umgehen.

Wenn der Export erfolgreich war, sollte das Ergebnis folgendermaßen aussehen:

Output2020-11-11T19:49:21.727+0000    connected to: mongodb://localhost/ 2020-11-11T19:49:21.765+0000    exported 323 records 

Das obige Beispiel zeigt, dass 323 Datensätze exportiert wurden, und Sie können sie in der von uns angegebenen Datei Bronx_Chinese_retaurants.json finden.

Verwenden Sie cat und less, um die Daten zu durchsuchen:

  • cat Bronx_Chinese_retaurants.json | less

Verwenden Sie SPACE, um die Daten zu übermitteln:

Output
  • date":{"$date":"2015-01-14T00:00:00Z"},"grade":"Z","score":36}],"na{"_id":{"$oid":"5fc8402d141f5e54f9054f8d"},"address":{"building":"1236","coord":[-73.8893654,40.81376179999999],"street":"238 Spofford Ave","zipcode":"10474"},"borough":"Bronx","cuisine":"Chinese","grades":[{"date":{"$date":"2013-12-30T00:00:00Z"},"grade":"A","score":8},{"date":{"$date":"2013-01-08T00:00:00Z"},"grade":"A","score":10},{"date":{"$date":"2012-06-12T00:00:00Z"},"grade":"B","score":15}],
  • . . .

Drücken Sie q, um zu beenden. Sie können nun eine MongoDB-Datenbank importieren und exportieren.

Zusammenfassung

Dieser Artikel hat Sie in die Grundlagen zum Importieren und Exportieren von Informationen zu und aus einer MongoDB-Datenbank eingeführt. Sie können weitere Informationen über So sichern Sie eine MongoDB-Datenbank unter Ubuntu 20.04 lesen.

Sie können auch die Replikation berücksichtigen. Durch die Replikation können Sie Ihren MongoDB-Dienst ohne Unterbrechung von einem Slave-MongoDB-Server aus fortsetzen, während Sie den Master-Dienst nach einem Fehler wiederherstellen. Teil der Replikation ist das Betriebsprotokoll (oplog), das alle Operationen aufzeichnet, die Ihre Daten ändern. Sie können dieses Protokoll genauso verwenden wie das Binärprotokoll in MySQL, um Ihre Daten nach dem letzten Backup wiederherzustellen. Denken Sie daran, dass Backups normalerweise nachts stattfinden. Wenn Sie sich entscheiden, abends einen Backup wiederherzustellen, fehlen Ihnen alle Aktualisierungen seit dem letzten Backup.