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.txt
pero 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 archivotee
escrito.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.
less
maneja 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.js
y su base de datos lo estáfoo
, se vería así:fuente
out.json
.mongo foo < find.js > out.json
funcionó.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 > outputFile
El 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
.js
extensión. Puede escribir todas esas agradables consultas de mongo shell sin cambiarlas en absoluto.Usando
print
yJSON.stringify
puede simplemente producir un resultado válidoJSON
.Utilice la
--quiet
bandera para filtrar el ruido de la carcasa de la salida.Utilice la
--norc
bandera para evitar la.mongorc.js
evaluació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
tee
para 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.json
Entonces uno puede ejecutarlo:
exportToJson.bat DbName CollectionName
fuente
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
-q
opción de consulta. También se convierteObjectId
al 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.json
fuente