¿Cómo imprimir más de 20 artículos (documentos) en el shell de MongoDB?


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

No lo haré. Todavía imprime solo 20 documentos.

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

ambos imprimirán una vista muy ampliada de cada documento en lugar de la versión de 1 línea para find():


De forma predeterminada, mongo shell imprime solo los primeros 20 documentos, puede obtener el próximo lote de 20 documentos escribiendo Type itel shell. Y así.
roottraveller

Respuestas:


381

1
¿Hay alguna manera de hacer esto persistente?
Lukasz Wiktor

77
@LukaszWiktor sí, puede crear un archivo $ HOME / .mongorc.js y poner esa configuración shellBatchSize allí. el mío tiene la configuración de tamaño de lote de consulta y rs.slaveOk () habilitado. su uso también es ligeramente diferente cuando se usa --eval a través de la línea de comandos. ver: docs.mongodb.com/manual/mongo/#mongorc-js-file
matias elgart

1
¡Eso es genial! Gracias @matiaselgart
Lukasz Wiktor

el enlace está desactualizado, no contiene dicha información. Además, ¿puedo pasar esto como una variable de entorno?
phil294

157

Desde el shell si desea mostrar todos los resultados que podría hacer db.collection.find().toArray()para obtener todos los resultados sin él.


Esta. Si solo los quiere en una concha para poder cortar y pegar, esto es suficiente.
superluminary

Este es más útil
anwerj

Esto es exactamente lo que hizo por mí. A decir verdad, solo necesitaba una forma de guardar todos los resultados de la salida de Robomongo. ¡Gracias!
Andrés Botero

Eso es genial, y también me permitió canalizar el resultado a jq :)
Omer van Kloeten

¡Solución perfecta! Hombre, esto es muy útil.
coderpc

93

Puede usar el itinterior del shell para iterar sobre los próximos 20 resultados. Simplemente escriba itsi ve "tiene más" y verá los próximos 20 elementos.


35
oh, realmente se trata de cómo imprimir todo sin usarit
polaridad

15
Gracias halfdan, ¡eres el doble que tu nombre de usuario dice que eres!
cassi.lup

66
La idea es NO usar el iterador
Amir Kost

2
Voté en contra porque esto es lo que el OP quería evitar (que es el comportamiento predeterminado).
crafter

41

Siempre podría hacer:

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

Para obtener esa vista compacta.

Además, me resulta muy útil limitar los campos devueltos por find así:

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

que devolvería solo el campo _id y nombre de foo.


1
Me gusta de esta manera porque se puede ejecutar en script de shell (cliente mongo con --eval)
Zheng Kai

1
@ZhengKai si está utilizando un script y no en el shell, entonces shellBatchSize no es relevante ya que el shell no repetirá los resultados, tendrá que hacerlo usted mismo.
Asya Kamsky el

El tojson () era exactamente lo que estaba buscando para convertirlo de DBQuery, ¡gracias!
Mark Pieszak - Trilon.io

4

Le sugiero que tenga un ~/.mongorc.jsarchivo para que no tenga que establecer el tamaño predeterminado cada vez.

 # 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

Para saber más sobre qué más puede hacer, le sugiero que consulte este artículo: http://mo.github.io/2017/01/22/mongo-db-tips-and-tricks.html


0

En el shell mongo, si el cursor devuelto no está asignado a una variable usando la palabra clave var, el cursor se itera automáticamente para acceder a los primeros 20 documentos que coinciden con la consulta. Puede configurar la variable DBQuery.shellBatchSize para cambiar el número de documentos iterados automáticamente.

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

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.