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.

raffian
fuente
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:

868

( nota: esta es la respuesta a la versión original de la pregunta, que no tenía requisitos para "predeterminado" )

Puedes pedirle que sea bonita.

db.collection.find().pretty()
Sergio Tulentsev
fuente
18
Si desea una salida coloreada + otras mejoras, visite github.com/TylerBrock/mongo-hacker @SAFX
Ryan Schumacher
Ahora: ¿cómo se imprime desde javascript externo cargado en Mongo? Esto no funcionará ...
Witold Kaczurba
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.

staackuser2
fuente
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.

Bhanu Chawla
fuente
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/

Aafreen Sheikh
fuente
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);
Goff
fuente
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.

Gaurav Gandhi
fuente
¿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)
Witold Kaczurba
fuente
-1

Mira esto:

db.collection.find().pretty()
Mohammad Heydari
fuente