¿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():

nonopolaridad
fuente
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

DBQuery.shellBatchSize = 300

lo haré

Documentos de MongoDB - Configure el mongo Shell - Cambie el tamaño del lote mongo Shell

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

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

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

Wilfred Knievel
fuente
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

Sahith Vibudhi
fuente
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/

Raj duro
fuente