texto sentencias relacionados mayor lista igual ejercicios documentos consultas comandos clausula buscar basicas javascript mongodb shell

javascript - sentencias - mongodb documentos relacionados



¿Hay alguna forma de imprimir bonito el resultado de shell de MongoDB en un archivo? (8)

Específicamente, quiero imprimir los resultados de un mongodb find() en un archivo. El objeto JSON es demasiado grande, por lo que no puedo ver el objeto completo con el tamaño de la ventana del shell.


Coloque su consulta (por ejemplo, db.someCollection.find().pretty() ) en un archivo javascript, digamos query.js . A continuación, ejecútelo en el shell de su sistema operativo mediante el comando:

mongo yourDb < query.js > outputFile

El resultado de la consulta estará en el archivo llamado ''outputFile''.

Por defecto, Mongo imprime los primeros 20 documentos IIRC. Si quiere más, puede definir un nuevo valor para el tamaño del lote en el shell Mongo, por ej.

DBQuery.shellBatchSize = 100 .


Como answer de Neodan mongoexport es bastante útil con la opción -q para consulta. También convierte ObjectId al formato estándar de JSON "$oid" . P.ej:

mongoexport -d yourdb -c yourcol --jsonArray --pretty -q ''{"field": "filter value"}'' -o output.json


Como está haciendo esto en un terminal y solo quiere inspeccionar un registro de una manera sensata, puede usar un truco como este:

mongo | tee somefile

Use la sesión como de costumbre: db.collection.find().pretty() o lo que sea necesario, ignore la salida larga y salga. Una transcripción de su sesión estará en el archivo en el que se escribió.

Tenga en cuenta que la salida puede contener secuencias de escape y otra basura debido a que mongo shell espera una sesión interactiva. less maneja esto con gracia.


El shell proporciona algunas características agradables pero ocultas porque es un entorno interactivo.

Cuando ejecuta comandos desde un archivo javascript a través de mongo commands.js, no obtendrá un comportamiento bastante idéntico.

Hay dos formas de evitar esto

(1) falsifique el caparazón y haga que piense que está en modo interactivo

$ mongo dbname << EOF > output.json db.collection.find().pretty() EOF

o
(2) use Javascript para traducir el resultado de un find() en un JSON imprimible

mongo dbname command.js > output.json

donde command.js contiene esto (o su equivalente):

printjson( db.collection.find().toArray() )

Esto imprimirá bastante la matriz de resultados, incluyendo [ ] - si no desea que pueda iterar sobre la matriz e printjson() cada elemento.

Por cierto, si está ejecutando solo una declaración de JavaScript, no tiene que ponerla en un archivo y, en su lugar, puede usar:

$ mongo --quiet dbname --eval ''printjson(db.collection.find().toArray())'' > output.json


Simplemente coloque los comandos que desea ejecutar en un archivo, luego páselos al shell junto con el nombre de la base de datos y redirija la salida a un archivo. Entonces, si su comando find está en find.js y su base de datos es foo , se vería así:

./mongo foo find.js >> out.json


También hay mongoexport para eso, pero no estoy seguro desde que versión está disponible.

Ejemplo:

mongoexport -d dbname -c collection --jsonArray --pretty --quiet --out output.json


Usando print y JSON.stringify , simplemente puede producir un resultado JSON válido .
Utilice --quiet flag para filtrar el ruido de la shell de la salida.
Utilice la bandera --norc para evitar la evaluación de .mongorc.js . (Tuve que hacerlo debido a un formateador bonito que uso, que produce salida JSON no válida ). ¿Usar DBQuery.shellBatchSize = ? reemplazando ? con el límite del resultado real para evitar paginación.

Y finalmente, use tee para canalizar la salida del terminal a un archivo:

// Shell: mongo --quiet --norc ./query.js | tee ~/my_output.json // query.js: DBQuery.shellBatchSize = 2000; function toPrint(data) { print(JSON.stringify(data, null, 2)); } toPrint( db.getCollection(''myCollection'').find().toArray() );

¡Espero que esto ayude!


Usando esta answer de Asya Kamsky, escribí un guión bat de una sola línea para Windows. La línea se ve así:

mongo --quiet %1 --eval "printjson(db.%2.find().toArray())" > output.json

Entonces uno puede ejecutarlo:

exportToJson.bat DbName CollectionName