Jolie impression dans le shell MongoDB par défaut

516

Existe-t-il un moyen de dire à Mongo une jolie sortie d'impression? Actuellement, tout est sorti sur une seule ligne et il est difficile à lire, en particulier avec les tableaux et les documents imbriqués.

raphian
la source
Maintenant: comment l'imprimer à partir d'un javascript externe chargé dans Mongo?
Witold Kaczurba
@WitoldKaczurba Essayez de chercher la réponse à votre question. Si vous ne trouvez pas de réponse, allez-y et postez-la en tant que nouvelle question.
MForMarlon

Réponses:

868

( note: il s'agit de la réponse à la version originale de la question, qui n'avait pas d'exigences pour "par défaut" )

Vous pouvez lui demander d'être jolie.

db.collection.find().pretty()
Sergio Tulentsev
la source
18
Si vous voulez une sortie colorisée + d'autres améliorations, consultez github.com/TylerBrock/mongo-hacker @SAFX
Ryan Schumacher
Maintenant: comment l'imprimer à partir d'un javascript externe chargé dans Mongo? Cela ne fonctionnera pas ...
Witold Kaczurba
416

Vous pouvez ajouter

DBQuery.prototype._prettyShell = true

à votre fichier $HOME/.mongorc.jspour permettre une jolie impression globale par défaut.

staackuser2
la source
13
Vous voudrez créer une fonction personnalisée qui la désactivera pour vous. Ajoutez ceci à votre $HOME/.mongorc.js: gist.github.com/mathrawka/6239405 Ensuite, vous pouvez faire quelque chose comme db.users.find (). Ugly () pour l'obtenir sans jolie impression.
staackuser2
5
+1 C'est super. Pour ceux qui n'ont pas de fichier .mongorc.js dans le dossier $ HOME; vous pouvez créer ce fichier et y ajouter des commandes. Après avoir redémarré le shell, cela fonctionne!
previous_developer
Comment puis-je vérifier dans un cli ou un shell mongo que cette option a été activée? Je veux dire, y a-t-il une commande spéciale pour ça mongo --checkConf 'pretty', pas en appelantdb.collection.find().limit(1)
Green
1
@ staackuser2, ce lien semble rompu :(
micseydel
Cela devrait être la réponse acceptée car la question est pointée: comment en faire une option par défaut. L'utilisateur connaît déjà la méthode .pretty () mais ne veut pas l'écrire à chaque fois
Ariel Monaco
54

(note: c'est la réponse à la question mise à jour)

Vous pouvez simplement le faire sur la CLI:

echo DBQuery.prototype._prettyShell = true >> ~/.mongorc.js

Et cela produira toujours de jolis résultats.

Bhanu Chawla
la source
1
Cela a parfaitement fonctionné pour moi. | Version shell MongoDB: 2.6.7 et version Oh-My-Zsh e55c715
tjfwalker
20

Comme il s'agit essentiellement d'un shell javascript, vous pouvez également utiliser toArray():

db.collection.find().toArray()

Cependant, cela imprimera tous les documents de la collection contrairement à pretty()ce qui vous permettra d'itérer. Voir: http://docs.mongodb.org/manual/reference/method/cursor.toArray/

Aafreen Sheikh
la source
2
Chose intéressante, à partir de la console, la .toArray()fonction génère un JSON mieux formaté que la .pretty()fonction. ie: Le premier enregistrement de ma collection est différent du reste (ce qui peut être le problème), mais .pretty()le vide comme { "_id" : "VERSION", "v" : "1.5" }- le tout sur une seule ligne, où .toArray()il est bien formaté comme le reste des enregistrements ..
wasatchwizard
17

Oh donc je suppose que .pretty () est égal à:

db.collection.find().forEach(printjson);
Goff
la source
8

Essayez Mongo-hacker (module de noeud), il est toujours joli. https://github.com/TylerBrock/mongo-hacker

De plus, il améliore le shell mongo (ne prend en charge que les versions> 2.4, la version actuelle est 3.0), comme

  • Colorisation
  • Commandes shell supplémentaires (count documents / count docs / etc)
  • Ajouts d'API (db.collection.find ({...}). Last (), db.collection.find ({...}). Reverse (), etc.)
  • Cadre d'agrégation

J'utilise depuis tout en production env, aucun problème pour le moment.

Gaurav Gandhi
la source
Que faire si je n'ai pas mongodb, juste installé un météore?
pihentagy
Remarque: lorsque vous installez mongo-hacker à l'aide de npm, il écrase apparemment $HOME/.mongorc.js.
Hubro
1

Je suis arrivé à la question, mais je n'ai pas pu comprendre comment l'imprimer à partir d'un mongo chargé en externe. Donc:

Cela fonctionne pour la console: et est préférable dans la console, mais ne fonctionne pas dans le javascript externe chargé par mongo:

db.quizes.find().pretty()

Cela fonctionne en javscript externe chargé en mongo:

db.quizes.find().forEach(printjson)
Witold Kaczurba
la source
-1

Regarde ça:

db.collection.find().pretty()
Mohammad Heydari
la source