Hübscher Druck in der MongoDB-Shell als Standard

516

Gibt es eine Möglichkeit, Mongo zu einer hübschen Druckausgabe zu bewegen? Derzeit wird alles in einer einzigen Zeile ausgegeben und ist schwer zu lesen, insbesondere bei verschachtelten Arrays und Dokumenten.

Raffian
quelle
Nun: Wie druckt man es aus externem Javascript, das in Mongo geladen ist?
Witold Kaczurba
@WitoldKaczurba Suchen Sie nach der Antwort auf Ihre Frage. Wenn Sie keine Antwort finden, stellen Sie diese als neue Frage.
MForMarlon

Antworten:

868

( Hinweis: Dies ist die Antwort auf die Originalversion der Frage, für die keine Anforderungen für "Standard" gestellt wurden. )

Sie können es bitten, hübsch zu sein.

db.collection.find().pretty()
Sergio Tulentsev
quelle
18
Wenn Sie eine farbige Ausgabe + weitere Verbesserungen wünschen, besuchen Sie github.com/TylerBrock/mongo-hacker @SAFX
Ryan Schumacher,
Nun: Wie druckt man es aus externem Javascript, das in Mongo geladen ist? Dies wird nicht funktionieren ...
Witold Kaczurba
416

Du kannst hinzufügen

DBQuery.prototype._prettyShell = true

in Ihre Datei ein $HOME/.mongorc.js, um hübsches Drucken standardmäßig global zu aktivieren.

staackuser2
quelle
13
Sie möchten eine benutzerdefinierte Funktion erstellen, die sie für Sie deaktiviert. Fügen Sie dies zu Ihrem hinzu $HOME/.mongorc.js: gist.github.com/mathrawka/6239405 Dann können Sie etwas wie db.users.find (). Hässlich () tun, um es ohne hübschen Druck zu erhalten.
Staackuser2
5
+1 Das ist großartig. Für diejenigen, die keine .mongorc.js-Datei im Ordner $ HOME haben; Sie können diese Datei erstellen und Befehle hinzufügen. Nachdem Sie die Shell neu gestartet haben, funktioniert es!
Vorheriger_Entwickler
Wie kann ich in einer CLI- oder Mongo-Shell überprüfen, ob diese Option aktiviert wurde? Ich meine, gibt es einen speziellen Befehl dafür mongo --checkConf 'pretty', nicht durch einen Anrufdb.collection.find().limit(1)
Green
1
@ staackuser2, dieser Link scheint unterbrochen zu sein :(
micseydel
Dies sollte die akzeptierte Antwort sein, da auf die Frage verwiesen wird: Wie wird dies zu einer Standardoption? Der Benutzer ist bereits mit der .pretty () -Methode vertraut, möchte sie jedoch nicht jedes Mal schreiben
Ariel Monaco
54

(Hinweis: Dies ist die Antwort auf die aktualisierte Frage.)

Sie können dies einfach über die CLI tun:

echo DBQuery.prototype._prettyShell = true >> ~/.mongorc.js

Und es wird immer schöne Ergebnisse liefern.

Bhanu Chawla
quelle
1
Das hat bei mir perfekt funktioniert. | MongoDB Shell Version: 2.6.7 und Oh-My-Zsh Version e55c715
tjfwalker
20

Da es sich im Grunde um eine Javascript-Shell handelt, können Sie auch Folgendes verwenden toArray():

db.collection.find().toArray()

Dadurch werden jedoch alle Dokumente der Sammlung gedruckt, im Gegensatz pretty()dazu können Sie iterieren. Siehe: http://docs.mongodb.org/manual/reference/method/cursor.toArray/

Aafreen Sheikh
quelle
2
Interessanterweise .toArray()gibt die .pretty()Funktion über die Konsole besser formatiertes JSON aus als die Funktion. dh: Der erste Datensatz meiner Sammlung unterscheidet sich vom Rest (was möglicherweise das Problem ist), gibt .pretty()ihn jedoch als { "_id" : "VERSION", "v" : "1.5" }- alles in einer Zeile, wo .toArray()er wie der Rest der Datensätze schön formatiert ist
Wasatchwizard
17

Oh, also denke ich .pretty () ist gleich:

db.collection.find().forEach(printjson);
Goff
quelle
8

Probieren Sie Mongo-Hacker (Knotenmodul) aus, es druckt immer hübsch. https://github.com/TylerBrock/mongo-hacker

Mehr verbessert es Mongo Shell (unterstützt nur Version> 2.4, aktuelle Version ist 3.0), wie

  • Färbung
  • Zusätzliche Shell-Befehle (Dokumente zählen / Dokumente zählen / etc)
  • API-Ergänzungen (db.collection.find ({...}). Last (), db.collection.find ({...}). Reverse () usw.)
  • Aggregationsrahmen

Ich benutze für eine Weile in der Produktion env, noch keine Probleme.

Gaurav Gandhi
quelle
Was ist, wenn ich kein Mongodb habe, sondern nur Meteor installiert habe?
Pihentagy
Hinweis: Wenn Sie Mongo-Hacker mit npm installieren, wird es anscheinend überschrieben $HOME/.mongorc.js.
Hubro
1

Ich bin auf die Frage gekommen, konnte aber nicht herausfinden, wie ich sie von einem extern geladenen Mongo drucken soll. Damit:

Dies funktioniert für die Konsole: und wird in der Konsole bevorzugt, funktioniert jedoch nicht in externem mongo-geladenem Javascript:

db.quizes.find().pretty()

Dies funktioniert in externem mongo-geladenem Javscript:

db.quizes.find().forEach(printjson)
Witold Kaczurba
quelle
-1

Überprüfen Sie dies heraus:

db.collection.find().pretty()
Mohammad Heydari
quelle