Comment imprimer plus de 20 éléments (documents) dans le shell de MongoDB?


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

ne le fera pas. Il n'imprime toujours que 20 documents.

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

imprimera à la fois une vue très étendue de chaque document au lieu de la version 1 ligne pour find():


Par défaut, le shell mongo n'imprime que les 20 premiers documents, vous pouvez obtenir les 20 lots suivants en tapant Type itle shell. Etc.
roottraveller

Réponses:


381

1
Existe-t-il un moyen de rendre cela persistant?
Lukasz Wiktor

7
@LukaszWiktor oui, vous pouvez créer un fichier $ HOME / .mongorc.js et y mettre ce paramètre shellBatchSize. le mien a le paramètre de taille de lot de requête et rs.slaveOk () activé. son utilisation est également légèrement différente lors de l'utilisation de --eval via la ligne de commande. voir: docs.mongodb.com/manual/mongo/#mongorc-js-file
matias elgart

1
C'est génial! Merci @matiaselgart
Lukasz Wiktor

le lien est obsolète, il ne contient pas de telles informations. De plus, puis-je transmettre cela en tant que variable d'environnement?
phil294

157

Depuis le shell, si vous souhaitez afficher tous les résultats, vous pouvez db.collection.find().toArray()obtenir tous les résultats sans.


Ce. Si vous voulez tout simplement tous dans une coquille afin que vous puissiez couper et coller, cela suffit.
superluminaire

Celui-ci est plus utile
anwerj

C'est exactement ce qui m'a fait. À vrai dire, j'avais juste besoin d'un moyen de sauvegarder tous les résultats de la sortie Robomongo. Je vous remercie!
Andrés Botero

C'est génial, et cela m'a également permis de transmettre le résultat à jq :)
Omer van Kloeten

Solution parfaite! Mec, c'est très utile.
coderpc

93

Vous pouvez utiliser l' itintérieur du shell pour parcourir les 20 prochains résultats. Tapez simplement itsi vous voyez «a plus» et vous verrez les 20 prochains articles.


35
oh, il s'agit vraiment d'imprimer tout sans utiliserit
non

15
Merci halfdan, vous êtes deux fois votre nom d'utilisateur dit que vous êtes!
cassi.lup

6
L'idée n'est PAS d'utiliser l'itérateur
Amir Kost

2
J'ai rétrogradé parce que c'est ce que l'OP voulait éviter (ce qui est le comportement par défaut).
crafter

41

Pourrait toujours faire:

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

Pour obtenir cette vue compacte.

De plus, je trouve très utile de limiter les champs retournés par la recherche:

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

qui retournerait seulement le champ _id et name de foo.


1
J'aime cette façon parce qu'elle peut être exécutée en script shell (client mongo avec --eval)
Zheng Kai

1
@ZhengKai si vous utilisez un script et pas dans le shell, alors shellBatchSize n'est pas pertinent car vos résultats ne seront pas itérés pour vous par le shell, vous devrez le faire vous-même.
Asya Kamsky

Le tojson () était exactement ce que je cherchais pour le convertir depuis DBQuery merci!
Mark Pieszak - Trilon.io

4

Je vous suggère d'avoir un ~/.mongorc.js fichier afin que vous n'ayez pas à définir la taille par défaut à chaque fois.

 # 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

Pour en savoir plus sur ce que vous pouvez faire d'autre, je vous suggère de consulter cet article: http://mo.github.io/2017/01/22/mongo-db-tips-and-tricks.html


0

Dans le shell mongo, si le curseur renvoyé n'est pas affecté à une variable à l'aide du mot clé var, le curseur est automatiquement itéré pour accéder aux 20 premiers documents correspondant à la requête. Vous pouvez définir la variable DBQuery.shellBatchSize pour modifier le nombre de documents à itération automatique.

Référence - https://docs.mongodb.com/v3.2/reference/method/db.collection.find/

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.