Die MongoDB-Datenbanktools enthalten ein Dienstprogramm namens mongoexport
damit können Sie MongoDB-Daten in eine CSV- oder JSON-Datei exportieren.
Eines der Dinge, die Sie mit diesem Dienstprogramm tun können, ist das Exportieren von Abfrageergebnissen. Dieser Artikel zeigt Ihnen, wie Sie mongoexport
verwenden zum Exportieren von MongoDB-Abfrageergebnissen in eine CSV-Datei.
Syntax
Die Syntax für mongoexport
geht so:
mongoexport --collection=<coll> <options> <connection-string>
Sie müssen mongoexport
ausführen Befehle über die Befehlszeile Ihres Systems (z. B. ein neues Terminal- oder Eingabeaufforderungsfenster).
Führen Sie mongoexport
nicht aus Befehle aus dem mongo
Hülse.
Beispiel
Der folgende Beispielcode exportiert die Ergebnisse einer Abfrage in eine CSV-Datei:
mongoexport --db=PetHotel --collection=pets --type=csv --fields=_id,name,type,weight --query='{ "type": "Dog" }' --out=data/dogs.csv
Dadurch wird eine Abfrage exportiert, die eine Sammlung namens pets
abfragt im PetHotel
Datenbank. Die Abfrage wird in eine Datei namens dogs.csv
exportiert in den data/
Mappe.
Wenn der Ordner nicht vorhanden ist, wird er erstellt. Das gleiche mit der Datei. Übrigens setzt dies voraus, dass es keine Berechtigungsprobleme beim Schreiben einer Datei an den angegebenen Speicherort gibt.
In diesem Beispiel habe ich keinen Host, Port, Authentifizierung usw. angegeben, daher wird die Sammlung aus der MongoDB-Instanz exportiert, die auf der standardmäßigen localhost-Portnummer 27017
ausgeführt wird .
Nachfolgend finden Sie eine Erklärung der Parameter, die wir hier angegeben haben.
Parameter | Beschreibung |
---|---|
--db oder -d | Gibt die Datenbank an, auf der mongoexport ausgeführt werden soll . In diesem Fall heißt die Datenbank PetHotel . Alternativ kann dieser Parameter auch mit -d übergeben werden (anstelle von --db ). |
--collection oder -c | Gibt die Sammlung an, die wir exportieren (oder für die wir die Abfrage ausführen möchten). In diesem Fall heißt die Sammlung pets . Dieser Parameter kann alternativ als -c übergeben werden (anstelle von --collection ). |
--type | Gibt den exportierten Dateityp an. In diesem Fall geben wir csv an um es in eine CSV-Datei zu exportieren. |
--fields | Gibt die Felder an, die wir exportieren möchten. Wir haben die Möglichkeit, alle Felder oder nur einige zu exportieren. Sie müssen hier alle durch ein Komma getrennt auflisten. Beim Export nach CSV ist die Angabe der Feldnamen zwingend erforderlich. Das geht über die --fields Parameter oder der --fieldFile Parameter (dazu später mehr). |
--query oder -q | Gibt die Abfrage an, für die wir Ergebnisse exportieren möchten. Dies muss in einfache Anführungszeichen gesetzt werden (damit es nicht mit Ihrer Shell interagiert). Dieser Parameter kann auch mit -q übergeben werden . |
--out | Gibt den Namen der exportierten Datei und ihren Speicherort an. Wenn Sie keinen Dateinamen angeben, mongoexport schreibt Daten auf die Standardausgabe (stdout ). |
Überprüfen Sie die exportierte Datei
Lassen Sie uns überprüfen, ob der Exportvorgang wie erwartet funktioniert hat.
Lassen Sie uns zuerst die Abfrage für die ursprüngliche Sammlung ausführen.
use PetHotel
db.pets.find({ "type": "Dog" })
Ergebnis:
{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 } { "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 10 } { "_id" : 6, "name" : "Fetch", "type" : "Dog", "weight" : 17 } { "_id" : 7, "name" : "Jake", "type" : "Dog", "weight" : 30 }
Wir können also sehen, dass es 4 Hunde gibt, alle mit denselben Feldern, die wir in unserem Exportvorgang angegeben haben.
Öffnen wir nun die exportierte Datei dogs.csv
um zu sehen, was drin ist:
_id,name,type,weight 1,Wag,Dog,20 2,Bark,Dog,10 6,Fetch,Dog,17 7,Jake,Dog,30
OK, also befinden sich alle Daten wie erwartet in der exportierten Datei.
Weniger Felder exportieren
Mit --fields
können Sie weniger Felder angeben Parameter, wenn Sie möchten.
Beispiel:
mongoexport --db=PetHotel --collection=pets --type=csv --fields=name,weight --query='{ "type": "Dog" }' --out=data/dogs.csv
Ergebnisdatei:
name,weight Wag,20 Bark,10 Fetch,17 Jake,30
Spaltenüberschriften entfernen
Sie werden feststellen, dass die exportierte Datei in den vorherigen Beispielen die Spaltenüberschriften enthielt.
Sie haben auch die Möglichkeit, die Datei ohne zu exportieren Spaltenüberschriften. Verwenden Sie dazu die --noHeaderLine
Parameter.
Beispiel:
mongoexport --db=PetHotel --collection=pets --type=csv --fields=_id,name,type,weight --query='{ "type": "Dog" }' --noHeaderLine --out=data/dogs.csv
Wenn ich jetzt die exportierte Datei öffne, gibt es keine Spaltenüberschriften:
1,Wag,Dog,20 2,Bark,Dog,10 6,Fetch,Dog,17 7,Jake,Dog,30
Verwenden Sie eine Datei für die Feldnamen
Sie können das --field
ersetzen Parameter mit dem --fieldFile
-Parameter, um den Namen einer Datei anzugeben, die die Feldnamen enthält, die Sie exportieren möchten.
mongoexport --db=PetHotel --collection=pets --type=csv --fieldFile=data/dogs_fields.txt --query='{ "type": "Dog" }' --out=data/dogs.csv
Die Datei, die die Felder enthält, muss die Felder aufgelistet haben, eines pro Zeile.
Das ist die dogs_fields.txt
Datei sah für dieses Beispiel so aus:
name type weight
Dies führte dazu, dass der Inhalt der exportierten Datei wie folgt aussah:
name,type,weight Wag,Dog,20 Bark,Dog,10 Fetch,Dog,17 Jake,Dog,30
Ändern der Spaltenreihenfolge
Sie können die Reihenfolge der zu exportierenden Felder ändern. Sie müssen nicht in derselben Reihenfolge wie das zugrunde liegende Dokument vorliegen.
Zum Beispiel dieser Code:
mongoexport --db=PetHotel --collection=pets --type=csv --fields=type,name,weight,_id --query='{ "type": "Dog" }' --out=data/dogs.csv
Ergibt die folgende CSV-Datei:
type,name,weight,_id Dog,Wag,20,1 Dog,Bark,10,2 Dog,Fetch,17,6 Dog,Jake,30,7
Zugriffskontrolle/Authentifizierung
Wenn Sie localhost nicht verwenden, können Sie --host
verwenden -Parameter zur Angabe des Hosts und --port
um den Port anzugeben. Sie können auch den --username
verwenden Parameter zur Angabe des Benutzernamens und --password
für das Passwort. Wenn Sie den Kennwortparameter weglassen, werden Sie dazu aufgefordert. Es gibt auch eine --authenticationDatabase
Parameter zur Angabe der Authentifizierungsdatenbank, in der der Benutzer erstellt wurde.
Beispiel:
mongoexport --host=myhost.example.com --port=37017 --username=homer --authenticationDatabase=admin --db=PetHotel --collection=pets --type=csv --fields=_id,name,type,weight --query='{ "type": "Dog" }' --out=data/dogs.csv
Suchen Sie nach mongoexport
mongoexport
ist Teil des MongoDB Database Tools-Pakets. Die MongoDB-Datenbanktools sind eine Reihe von Befehlszeilendienstprogrammen für die Arbeit mit MongoDB.
Wenn Sie nicht sicher sind, ob Sie die MongoDB Database Tools/mongoexport
haben installiert haben, versuchen Sie, den folgenden Befehl in Ihrem Terminal oder Ihrer Eingabeaufforderung auszuführen, um dies zu überprüfen:
mongoexport --version
Wenn Sie es haben, sollten Sie Versionsinformationen usw. sehen. Wenn Sie es nicht haben, können Sie die Installationsanweisungen auf der MongoDB-Website verwenden, um es auf Ihrem System zu installieren.
Wo sollen die Befehle ausgeführt werden?
Vergessen Sie nicht, dass Sie mongoexport
ausführen müssen Befehle über die Befehlszeile Ihres Systems (z. B. ein neues Terminal- oder Eingabeaufforderungsfenster).