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.
fuente
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.
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 idéntico.
Hay dos formas de evitar esto.
(1) falsifica el caparazón y hazle creer que estás en modo interactivo
$ mongo dbname << EOF > output.json
db.collection.find().pretty()
EOF
o
(2) use Javascript para traducir el resultado de a 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, incluido [ ]: si no lo desea, puede iterar sobre la matriz y printjson()cada elemento.
Por cierto, si está ejecutando una sola 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
mongo blah.mongolab.com:33478/blah -u user -p pass --eval "my query" >> dump.txtpero me dioJavaScript execution failed: SyntaxError: Unexpected token ILLEGAL.Dado que está haciendo esto en una terminal y solo desea inspeccionar un registro de una manera sensata, puede usar un truco como este:
Use la sesión como de costumbre,
db.collection.find().pretty()o lo que sea que necesite hacer, ignore la salida larga y salga. Una transcripción de su sesión estará en el archivoteeescrito.Tenga en cuenta que la salida puede contener secuencias de escape y otra basura debido a que el shell mongo espera una sesión interactiva.
lessmaneja estos con gracia.fuente
Simplemente coloque los comandos que desea ejecutar en un archivo, luego páselo al shell junto con el nombre de la base de datos y redirija la salida a un archivo. Entonces, si su comando de búsqueda está adentro
find.jsy su base de datos lo estáfoo, se vería así:fuente
out.json.mongo foo < find.js > out.jsonfuncionó.Ponga su consulta (por ejemplo
db.someCollection.find().pretty()) en un archivo javascript, digamosquery.js. Luego ejecútelo en el shell de su sistema operativo usando el comando:mongo yourDb < query.js > outputFileEl resultado de la consulta estará en el archivo llamado 'outputFile'.
De forma predeterminada, Mongo imprime los primeros 20 documentos IIRC. Si desea más, puede definir un nuevo valor para el tamaño del lote en Mongo shell, por ejemplo
DBQuery.shellBatchSize = 100.fuente
.jsextensión. Puede escribir todas esas agradables consultas de mongo shell sin cambiarlas en absoluto.Usando
printyJSON.stringifypuede simplemente producir un resultado válidoJSON.Utilice la
--quietbandera para filtrar el ruido de la carcasa de la salida.Utilice la
--norcbandera para evitar la.mongorc.jsevaluación. (Tuve que hacerlo debido a un bonito formateador que uso, que produce una salida JSON no válida ) Use laDBQuery.shellBatchSize = ?sustitución?con el límite del resultado real para evitar la paginación.Y finalmente, use
teepara canalizar la salida del terminal a un archivo:¡Espero que esto ayude!
fuente
Usando esta respuesta de Asya Kamsky, escribí un script bat de una línea para Windows. La línea se ve así:
mongo --quiet %1 --eval "printjson(db.%2.find().toArray())" > output.jsonEntonces uno puede ejecutarlo:
exportToJson.bat DbName CollectionNamefuente
Logré guardar el resultado con la función writeFile () .
La versión de shell de Mongo era 4.0.9
fuente
También hay mongoexport para eso, pero no estoy seguro desde qué versión está disponible.
Ejemplo:
fuente
Como respuesta de Neodan, mongoexport es bastante útil con la
-qopción de consulta. También se convierteObjectIdal formato estándar de JSON"$oid". P.ej:fuente
puedes usar este comando para lograrlo:
mongo admin -u <userName> -p <password> --quiet --eval "cursor = rs.status(); printjson(cursor)" > output.jsonfuente