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.


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()

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.


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.


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/


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);

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.


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)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.