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


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

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.


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.


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.


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


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/

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.