webentwicklung-frage-antwort-db.com.de

Drucken der Ausgabe einer Mongo-Abfrage in eine Datei, während Sie sich in der Mongo-Shell befinden

Ich bin 2 Tage alt mit Mongo und habe einen SQL-Hintergrund. Wie bei MySQL ist es sehr praktisch, sich in der MySQL-Befehlszeile zu befinden und die Ergebnisse einer Abfrage in einer Datei auf dem Computer auszugeben. Ich versuche zu verstehen, wie ich dasselbe mit Mongo machen kann , während ich in der Shell bin

Ich kann die Ausgabe einer gewünschten Abfrage problemlos abrufen, indem ich mich außerhalb der Shell befinde und den folgenden Befehl ausführe:

mongo localhost:27017/dbname --eval "printjson(db.collectionName.findOne())" >> sample.json

Der obige Weg ist in Ordnung, aber es erfordert, dass ich die Mongo-Shell verlasse oder eine neue Terminal-Registerkarte öffne, um diesen Befehl auszuführen. Es wäre sehr praktisch, wenn ich dies einfach tun könnte, während ich mich noch in der Shell befinde.

P.S: Die Frage ist ein Ableger einer Frage, die ich am ALSO gestellt habe

43
Parijat Kalia

AFAIK, gibt es keine interaktive Option für die Ausgabe in eine Datei, gibt es eine vorherige SO Frage im Zusammenhang mit diesem: Drucken von Mongodb-Shell-Ausgabe in Datei

Sie können jedoch die gesamte Shell-Sitzung protokollieren, wenn Sie den Befehl Shell with tee aufgerufen haben:

$ mongo | tee file.txt
MongoDB Shell version: 2.4.2
connecting to: test
> printjson({this: 'is a test'})
{ "this" : "is a test" }
> printjson({this: 'is another test'})
{ "this" : "is another test" }
> exit
bye

Dann erhalten Sie eine Datei mit folgendem Inhalt:

MongoDB Shell version: 2.4.2
connecting to: test
> printjson({this: 'is a test'})
{ "this" : "is a test" }
> printjson({this: 'is another test'})
{ "this" : "is another test" }
> exit
bye

Um alle Befehle zu entfernen und nur die json-Ausgabe beizubehalten, können Sie einen Befehl wie den folgenden verwenden:

tail -n +3 file.txt | egrep -v "^>|^bye" > output.json

Dann bekommst du:

{ "this" : "is a test" }
{ "this" : "is another test" }
52
Roberto

Wenn Sie die Shell mit den Argumenten script-file, db address und --quiet aufrufen, können Sie die Ausgabe (zum Beispiel mit print ()) in eine Datei umleiten:

mongo localhost/mydatabase --quiet myScriptFile.js > output 
18
Rondo

Wir können es so machen -

mongo db_name --quiet --eval 'DBQuery.shellBatchSize = 2000; db.users.find({}).limit(2000)' > users.json

Mit dem Argument shellBatchSize wird festgelegt, wie viele Zeilen der Mongo-Client drucken darf. Der Standardwert ist 20.

17
Jyotman Singh

Mehrere Bedingungen kombinieren:

  • schreiben Sie die Mongo-Abfrage in die JS-Datei und senden Sie sie vom Terminal aus
  • eine Datenbank programmatisch wechseln/definieren
  • alle gefundenen Datensätze ausgeben
  • anfangsausgabeleitungen abschneiden
  • speichern Sie die Ausgabe in einer JSON-Datei

myScriptFile.js

// Switch current database to "mydatabase"
db = db.getSiblingDB('mydatabase');

// The mark for cutting initial output off
print("CUT_TO_HERE");

// Main output
// "toArray()" method allows to get all records
printjson( db.getCollection('jobs').find().toArray() );

Senden der Abfrage vom Terminal

-z Schlüssel von sed erlaubt die Ausgabe als einzelne mehrzeilige Zeichenkette

$> mongo localhost --quiet myScriptFile.js | sed -z 's/^.*CUT_TO_HERE\n//' > output.json

3
SergO

Es kann hilfreich sein, die Anzahl der angezeigten Ergebnisse zu erhöhen

In der Mongo Shell> DBQuery.shellBatchSize = 3000

und dann können Sie alle Ergebnisse auf einmal aus dem Terminal auswählen und in eine Textdatei einfügen.

Es ist das, was ich tun werde:)

(von: https://stackoverflow.com/a/3705615/1290746 )

3
kris