Impresión bonita en el shell MongoDB por defecto


516

¿Hay alguna manera de decirle a Mongo que imprima bonita salida? Actualmente, todo se genera en una sola línea y es difícil de leer, especialmente con matrices y documentos anidados.


Ahora: ¿cómo se imprime desde javascript externo cargado en Mongo?
Witold Kaczurba

@WitoldKaczurba Intenta buscar la respuesta a tu pregunta. Si no encuentra una respuesta, continúe y publíquela como una nueva pregunta.
MForMarlon

Respuestas:



416

Puedes añadir

DBQuery.prototype._prettyShell = true

a su archivo $HOME/.mongorc.jspara permitir una impresión bonita de forma global de forma predeterminada.


13
Querrá crear una función personalizada que la desactive por usted. Agregue esto a su $HOME/.mongorc.js: gist.github.com/mathrawka/6239405 Luego puede hacer algo como db.users.find (). Ugly () para obtenerlo sin una bonita impresión.
staackuser2

55
+1 Esto es genial. Para aquellos que no tienen un archivo .mongorc.js en la carpeta $ HOME; puede crear este archivo y agregar comandos en él. Después de reiniciar shell, ¡funciona!
previous_developer

¿Cómo puedo verificar en un cli o en mongo shell que esta opción ha sido habilitada? Quiero decir, ¿hay un comando especial para eso, como mongo --checkConf 'pretty', no llamandodb.collection.find().limit(1)
Verde el

1
@ staackuser2, ese enlace parece estar roto :(
micseydel

Esta debería ser la respuesta aceptada cuando se señala la pregunta: cómo hacer que esta sea una opción predeterminada. El usuario ya está familiarizado con el método .pretty () pero no quiere escribirlo todo el tiempo
Ariel Monaco

54

(nota: esta es la respuesta a la pregunta actualizada)

Puede hacer esto en la CLI:

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

Y siempre dará resultados bonitos.


1
Esto funcionó para mí perfectamente. El | Versión de shell MongoDB: 2.6.7 y versión Oh-My-Zsh e55c715
tjfwalker

20

Dado que es básicamente un shell de JavaScript, también puede usar toArray():

db.collection.find().toArray()

Sin embargo, esto imprimirá todos los documentos de la colección a diferencia de lo pretty()que le permitirá iterar. Consulte: http://docs.mongodb.org/manual/reference/method/cursor.toArray/


2
Curiosamente, desde la consola, la .toArray()función genera JSON mejor formateada que la .pretty()función. es decir: El primer disco de mi colección es diferente que el resto (que puede ser el problema), pero .pretty()lo vuelca a cabo como { "_id" : "VERSION", "v" : "1.5" }- todo en una línea, en .toArray()el formato que sea agradable como el resto de los registros ..
wasatchwizard

17

Oh, entonces supongo que .pretty () es igual a:

db.collection.find().forEach(printjson);

8

Prueba Mongo-hacker (módulo de nodo), siempre se imprime bonito. https://github.com/TylerBrock/mongo-hacker

Más mejora mongo shell (solo admite ver> 2.4, la versión actual es 3.0), como

  • Coloración
  • Comandos de shell adicionales (recuento de documentos / recuento de documentos / etc.)
  • Adiciones API (db.collection.find ({...}). Last (), db.collection.find ({...}). Reverse (), etc.)
  • Marco de agregación

Estoy usando durante la producción, no hay problemas todavía.


¿Qué pasa si no tengo mongodb, acabo de instalar meteorito?
pihentagy

Nota: cuando instala mongo-hacker usando npm, aparentemente se sobrescribe $HOME/.mongorc.js.
Hubro

1

Llegué a la pregunta, pero no pude descubrir cómo imprimirla desde un mongo cargado externamente. Entonces:

Esto funciona para la consola: y se prefiere en la consola, pero no funciona en javascript externo cargado con mongo:

db.quizes.find().pretty()

Esto funciona en javscript externo cargado con mongo:

db.quizes.find().forEach(printjson)

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.