Come stampare più di 20 articoli (documenti) nella shell di MongoDB?


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

non lo farà. Stampa ancora solo 20 documenti.

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

entrambi stamperanno una vista molto estesa di ciascun documento invece della versione a 1 riga per find():


Per impostazione predefinita, la shell mongo stampa solo i primi 20 documenti, è possibile ottenere i successivi 20 documenti batch digitando Type itla shell. E così via.
roottraveller,

Risposte:


381

1
C'è un modo per renderlo persistente?
Lukasz Wiktor,

7
@LukaszWiktor sì, puoi creare un file $ HOME / .mongorc.js e inserire lì l'impostazione shellBatchSize. il mio ha l'impostazione della dimensione batch della query e rs.slaveOk () abilitato. il suo utilizzo è anche leggermente diverso quando si utilizza --eval tramite riga di comando. vedi: docs.mongodb.com/manual/mongo/#mongorc-js-file
matias elgart,

1
È fantastico! Grazie @matiaselgart
Lukasz Wiktor il

il link non è aggiornato, non contiene tali informazioni. Inoltre, posso passare questo come una variabile di ambiente?
phil294

157

Dalla shell se vuoi mostrare tutti i risultati che potresti fare db.collection.find().toArray()per ottenere tutti i risultati senza di essa.


Questo. Se li vuoi solo in una shell in modo da poterli tagliare e incollare, questo è sufficiente.
superluminario

Questo è più utile
anwerj

Questo è esattamente quello che ha fatto per me. A dire il vero avevo solo bisogno di un modo per salvare tutti i risultati dall'output di Robomongo. Grazie!
Andrés Botero,

È fantastico, e mi ha anche permesso di convogliare il risultato su jq :)
Omer van Kloeten,

Soluzione perfetta! Amico, questo è molto utile.
coderpc,

93

È possibile utilizzare l' itinterno della shell per scorrere i successivi 20 risultati. Basta digitare itse vedi "ne ha di più" e vedrai i prossimi 20 elementi.


35
oh, si tratta davvero di come stampare tutto senza usareit
nonopolarità

15
Grazie halfdan, sei due volte il tuo nome utente dice che lo sei!
cassi.lup,

6
L'idea è di NON usare l'iteratore
Amir Kost,

2
Ho annullato il downgrade perché questo è ciò che l'OP ha voluto evitare (che è il comportamento predefinito).
Crafter,

41

Potrebbe sempre fare:

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

Per ottenere quella visione compatta.

Inoltre, trovo molto utile limitare i campi restituiti dalla ricerca, quindi:

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

che restituirebbe solo il campo _id e name da foo.


1
Mi piace in questo modo perché può essere eseguito in shell script (client mongo con --eval)
Zheng Kai,

1
@ZhengKai se stai usando uno script e non nella shell, shellBatchSize non è rilevante in quanto i risultati non verranno ripetuti per te dalla shell, dovrai farlo tu stesso.
Asya Kamsky,

Il tojson () era esattamente quello che stavo cercando per convertirlo da DBQuery, grazie!
Mark Pieszak - Trilon.io,

4

Ti suggerisco di avere un ~/.mongorc.jsfile in modo da non dover impostare la dimensione predefinita ogni volta.

 # 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

Per saperne di più su cos'altro puoi fare, ti suggerisco di guardare questo articolo: http://mo.github.io/2017/01/22/mongo-db-tips-and-tricks.html


0

Nella shell mongo, se il cursore restituito non è assegnato a una variabile utilizzando la parola chiave var, il cursore viene ripetuto automaticamente per accedere ai primi 20 documenti corrispondenti alla query. È possibile impostare la variabile DBQuery.shellBatchSize per modificare il numero di documenti ripetuti automaticamente.

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.