Wie drucke ich in Mongo Ergebnisse hübsch aus, damit .find () wie .findOne () aussieht?

70

findOne() führt zu einem hübsch gedruckten JSON-Objekt.

find() führt zu einem verwirrten JSON-Objekt.

Wie kann ich find()das Gleiche machen findOne(), wenn es um die Anzeige in der Mongo-Shell geht?

TIMEX
quelle
Was ist mit find().limit(1)?
Alex
Meine Mongo-Shell macht nichts, wenn ich ein 'find ()' ausführe. Ich erhalte weder Fehler noch Ergebnisse, aber wenn ich Daten aus Python oder PHP ziehe, erhalte ich meine Ergebnisse. Ist das nicht seltsam?
Python29033

Antworten:

154

Wenn Sie Skripte mit Javascript erstellen, können Sie die Antwort von dcrosta verwenden. Wenn Sie jedoch direkt auf der interaktiven Mongo-Shell drucken möchten, müssen Sie hübsch () an Ihre find () - Abfragen anhängen.

Geben Sie auf der Shell Folgendes ein: db.yourcollection.find().pretty()

Rohan
quelle
Dies scheint den Vorteil zu haben, dass auch die normale Grenze für find () beibehalten wird. Vielen Dank!
Chris
Vielen Dank! Fast zu intuitiv. Ich googelte "Mongo Console Pretty Output". Wer wusste, dass es nur .pretty () ist
kmehta
Gibt es eine Möglichkeit, .pretty () als Standard festzulegen?
Jonathan Dumaine
Die Casbah API (Scala) scheint keine .pretty zu haben oder fehlt mir etwas?
Akauppi
20

Das von den find()Unterstützungen zurückgegebene Cursorobjekt forEach(), sodass Sie Folgendes verwenden können:

db.foo.find().forEach(printjson)

Beachten Sie jedoch, dass Sie im Gegensatz zu der Standardausgabe, in find()der die ersten 10 Objekte angezeigt forEach()werden, die gesamte Ergebnismenge iterieren können , ob Sie mit der Iteration fortfahren möchten oder nicht . Wenn Ihre Abfrage viele Ergebnisse liefert, kann dies eine Weile dauern und ist möglicherweise nicht besonders hilfreich. limit()ist dein Freund hier.

dcrosta
quelle
4
In Mongo 2.0 wird dies durch die .pretty () - Antwort von Rohan ersetzt.
werkshy
4

Die richtige Antwort wird bereits mit der Verwendung von bereitgestellt .pretty().

Nur als Randnotiz können Sie jedoch auch .toArray () am Cursor aufrufen, um die Dokumente als Javascript-Array von JSON abzurufen.

db.foo.find().toArray()
Rahul Kumar
quelle
3

Es war möglicherweise zum Zeitpunkt der Beantwortung der Frage nicht verfügbar, aber um die Standardausgabe für alle find()Abfragen hübsch zu gestalten, verwende ich:

DBQuery.prototype._prettyShell = true

Ich füge auch Folgendes hinzu:

DBQuery.prototype.ugly = function() {
    this._prettyShell = false;
    return this;
}

Dadurch kann ich die Ergebnisse einer einzelnen find()Abfrage mithilfe von:

db.mycollection.find().ugly()

Normalerweise füge ich meiner ~/.mongorc.jsDatei beide Prototypdeklarationen hinzu, damit sie in allen Mongo-Cli-Shells verfügbar sind.

David Weinraub
quelle