Wie drucke ich mehr als 20 Elemente (Dokumente) in der MongoDB-Shell aus?

253
db.foo.find().limit(300)

werde es nicht tun. Es werden immer noch nur 20 Dokumente ausgedruckt.

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

Beide drucken eine sehr erweiterte Ansicht jedes Dokuments anstelle der einzeiligen Version für find():

Unpolarität
quelle
Standardmäßig druckt die Mongo-Shell nur die ersten 20 Dokumente. Sie können die nächsten 20 Dokumente erhalten, indem Sie Type itdie Shell eingeben . Und so weiter.
Roottraveller

Antworten:

381

DBQuery.shellBatchSize = 300

Wird besorgt.

MongoDB-Dokumente - Konfigurieren der Mongo-Shell - Ändern der Stapelgröße der Mongo-Shell

Thilo
quelle
1
Gibt es eine Möglichkeit, dies dauerhaft zu machen?
Lukasz Wiktor
7
@LukaszWiktor Ja, Sie können eine $ HOME / .mongorc.js-Datei erstellen und diese shellBatchSize-Einstellung dort einfügen. Bei mir ist die Einstellung für die Stapelgröße der Abfrage und rs.slaveOk () aktiviert. Die Verwendung unterscheidet sich auch geringfügig, wenn Sie --eval über die Befehlszeile verwenden. siehe: docs.mongodb.com/manual/mongo/#mongorc-js-file
matias elgart
1
Das ist großartig! Danke @matiaselgart
Lukasz Wiktor
Der Link ist veraltet und enthält keine derartigen Informationen. Kann ich dies auch als Umgebungsvariable übergeben?
Phil294
157

Wenn Sie in der Shell alle Ergebnisse anzeigen möchten, können Sie db.collection.find().toArray()alle Ergebnisse ohne diese Shell erhalten.

Sridhar
quelle
Dies. Wenn Sie sie nur alle in einer Shell haben möchten, damit Sie sie ausschneiden und einfügen können, ist dies ausreichend.
Superluminary
Dieser ist nützlicher
anwerj
Genau das hat es für mich getan. Um ehrlich zu sein, ich brauchte nur einen Weg, um alle Ergebnisse der Robomongo-Ausgabe zu speichern. Danke dir!
Andrés Botero
Das ist großartig und ich kann das Ergebnis auch an jq weiterleiten :)
Omer van Kloeten
Perfekte Lösung! Mann, das ist sehr nützlich.
Coderpc
93

Sie können itinnerhalb der Shell die nächsten 20 Ergebnisse durchlaufen. Geben itSie einfach ein, wenn Sie "hat mehr" sehen und Sie die nächsten 20 Elemente sehen.

Halfdan
quelle
35
Oh, es geht wirklich darum, wie man alles ohne Verwendung it
ausdrucken kann
15
Danke halfdan, du bist doppelt so groß wie dein Benutzername!
Cassi.lup
6
Die ganze Idee ist, NICHT den Iterator zu verwenden
Amir Kost
2
Ich habe abgestimmt, weil das OP dies vermeiden wollte (was das Standardverhalten ist).
Crafter
41

Könnte immer tun:

db.foo.find().forEach(function(f){print(tojson(f, '', true));});

Um diese kompakte Ansicht zu erhalten.

Außerdem finde ich es sehr nützlich, die vom Fund zurückgegebenen Felder so einzuschränken:

db.foo.find({},{name:1}).forEach(function(f){print(tojson(f, '', true));});

Dies würde nur das Feld _id und name von foo zurückgeben.

Wilfred Knievel
quelle
1
Ich mag diesen Weg, weil es in Shell-Skript (Mongo Client mit --eval) ausgeführt werden kann
Zheng Kai
1
@ZhengKai Wenn Sie ein Skript verwenden und sich nicht in der Shell befinden, ist shellBatchSize nicht relevant, da Ihre Ergebnisse von der Shell nicht für Sie wiederholt werden. Sie müssen dies selbst tun.
Asya Kamsky
Das tojson () war genau das, wonach ich gesucht habe, um es von DBQuery zu konvertieren. Danke!
Mark Pieszak - Trilon.io
4

Ich empfehle Ihnen, eine ~/.mongorc.jsDatei zu haben , damit Sie nicht jedes Mal die Standardgröße festlegen müssen.

 # execute in your terminal
 touch ~/.mongorc.js
 echo 'DBQuery.shellBatchSize = 100;' > ~/.mongorc.js
 # add one more line to always prettyprint the ouput
 echo 'DBQuery.prototype._prettyShell = true; ' >> ~/.mongorc.js

Um mehr darüber zu erfahren, was Sie sonst noch tun können, empfehlen wir Ihnen, diesen Artikel zu lesen : http://mo.github.io/2017/01/22/mongo-db-tips-and-tricks.html

Sahith Vibudhi
quelle
0

Wenn in der Mongo-Shell der zurückgegebene Cursor keiner Variablen mit dem Schlüsselwort var zugewiesen wird, wird der Cursor automatisch iteriert, um auf die ersten 20 Dokumente zuzugreifen, die der Abfrage entsprechen. Sie können die Variable DBQuery.shellBatchSize festlegen, um die Anzahl der automatisch iterierten Dokumente zu ändern.

Referenz - https://docs.mongodb.com/v3.2/reference/method/db.collection.find/

Harter Raj
quelle