Insbesondere möchte ich die Ergebnisse eines Mongodb find()
in eine Datei drucken . Das JSON-Objekt ist zu groß, sodass ich nicht das gesamte Objekt mit der Shell-Fenstergröße anzeigen kann.
quelle
Insbesondere möchte ich die Ergebnisse eines Mongodb find()
in eine Datei drucken . Das JSON-Objekt ist zu groß, sodass ich nicht das gesamte Objekt mit der Shell-Fenstergröße anzeigen kann.
Die Shell bietet einige nette, aber versteckte Funktionen, da es sich um eine interaktive Umgebung handelt.
Wenn Sie Befehle aus einer Javascript-Datei über mongo command.js ausführen, erhalten Sie kein ganz identisches Verhalten.
Es gibt zwei Möglichkeiten, dies zu umgehen.
(1) Fälschen Sie die Shell aus und lassen Sie sie glauben, dass Sie sich im interaktiven Modus befinden
$ mongo dbname << EOF > output.json
db.collection.find().pretty()
EOF
oder
(2) verwenden Sie Javascript, um das Ergebnis von a find()
in einen druckbaren JSON zu übersetzen
mongo dbname command.js > output.json
Dabei enthält command.js Folgendes (oder ein gleichwertiges Element):
printjson( db.collection.find().toArray() )
Dadurch wird das Array der Ergebnisse hübsch gedruckt, einschließlich [ ]
- wenn Sie nicht möchten, dass Sie über das Array und printjson()
jedes Element iterieren können .
Übrigens, wenn Sie nur eine einzige Javascript-Anweisung ausführen, müssen Sie sie nicht in eine Datei einfügen, sondern können Folgendes verwenden:
$ mongo --quiet dbname --eval 'printjson(db.collection.find().toArray())' > output.json
mongo blah.mongolab.com:33478/blah -u user -p pass --eval "my query" >> dump.txt
aber es gab mirJavaScript execution failed: SyntaxError: Unexpected token ILLEGAL
.Da Sie dies auf einem Terminal tun und nur einen Datensatz auf vernünftige Weise überprüfen möchten, können Sie einen Trick wie den folgenden verwenden:
Verwenden Sie die Sitzung wie gewohnt -
db.collection.find().pretty()
oder was auch immer Sie tun müssen, ignorieren Sie die lange Ausgabe und beenden Sie sie. Eine Abschrift Ihrer Sitzung befindet sich in der Datei, in dietee
geschrieben wurde.Beachten Sie, dass die Ausgabe möglicherweise Escape-Sequenzen und anderen Müll enthält, da die Mongo-Shell eine interaktive Sitzung erwartet.
less
behandelt diese anmutig.quelle
Fügen Sie einfach die Befehle, die Sie ausführen möchten, in eine Datei ein, übergeben Sie sie zusammen mit dem Datenbanknamen an die Shell und leiten Sie die Ausgabe in eine Datei um. Wenn sich Ihr Befehl find in
find.js
und Ihre Datenbank befindetfoo
, sieht er folgendermaßen aus:quelle
out.json
.mongo foo < find.js > out.json
funktionierte.Stellen Sie Ihre Abfrage (z. B.
db.someCollection.find().pretty()
) in eine Javascript-Datei, sagen wirquery.js
. Führen Sie es dann in der Shell Ihres Betriebssystems mit dem folgenden Befehl aus:mongo yourDb < query.js > outputFile
Das Abfrageergebnis befindet sich in der Datei 'outputFile'.
Standardmäßig druckt Mongo die ersten 20 Dokumente IIRC aus. Wenn Sie mehr möchten, können Sie in der Mongo-Shell einen neuen Wert für die Stapelgröße definieren, z
DBQuery.shellBatchSize = 100
.quelle
.js
Erweiterung irreführen . Sie können all diese netten Mongo-Shell-Abfragen schreiben, ohne sie zu ändern.Mit
print
und könnenJSON.stringify
Sie einfach ein gültigesJSON
Ergebnis erstellen .Verwenden Sie das
--quiet
Flag, um das Shell-Rauschen vom Ausgang zu filtern.Verwenden Sie das
--norc
Flag, um eine.mongorc.js
Auswertung zu vermeiden . (Ich musste es wegen eines von mir verwendeten hübschen Formatierers tun, der eine ungültige JSON- Ausgabe erzeugt.) Verwenden Sie dasDBQuery.shellBatchSize = ?
Ersetzen?
durch das Limit des tatsächlichen Ergebnisses, um Paging zu vermeiden.Verwenden Sie
tee
zum Schluss die Terminalausgabe in eine Datei:Hoffe das hilft!
quelle
Mit dieser Antwort von Asya Kamsky habe ich ein einzeiliges Fledermausskript für Windows geschrieben. Die Linie sieht so aus:
mongo --quiet %1 --eval "printjson(db.%2.find().toArray())" > output.json
Dann kann man es ausführen:
exportToJson.bat DbName CollectionName
quelle
Ich habe es geschafft, das Ergebnis mit der Funktion writeFile () zu speichern .
Die Mongo-Shell-Version war 4.0.9
quelle
Es gibt auch Mongoexport dafür, aber ich bin mir nicht sicher, seit welcher Version es verfügbar ist.
Beispiel:
quelle
Als Antwort von Neodan ist Mongoexport sehr nützlich mit
-q
Option für die Abfrage. Es wird auchObjectId
in das Standardformat von JSON konvertiert"$oid"
. Z.B:quelle
Mit diesem Befehl können Sie Folgendes erreichen:
mongo admin -u <userName> -p <password> --quiet --eval "cursor = rs.status(); printjson(cursor)" > output.json
quelle