Especificamente, desejo imprimir os resultados de um mongodb find()
em um arquivo. O objeto JSON é muito grande, então não consigo visualizar o objeto inteiro com o tamanho da janela do shell.
fonte
Especificamente, desejo imprimir os resultados de um mongodb find()
em um arquivo. O objeto JSON é muito grande, então não consigo visualizar o objeto inteiro com o tamanho da janela do shell.
O shell oferece alguns recursos interessantes, mas ocultos, porque é um ambiente interativo.
Quando você executa comandos de um arquivo javascript por meio do mongo commands.js, você não obterá um comportamento totalmente idêntico.
Existem duas maneiras de contornar isso.
(1) falsificar o shell e fazê-lo pensar que você está no modo interativo
$ mongo dbname << EOF > output.json
db.collection.find().pretty()
EOF
ou
(2) usar Javascript para traduzir o resultado de um find()
em um JSON imprimível
mongo dbname command.js > output.json
onde command.js contém isto (ou seu equivalente):
printjson( db.collection.find().toArray() )
Isso imprimirá bastante o array de resultados, incluindo [ ]
- se você não quiser, pode iterar sobre o array e printjson()
cada elemento.
A propósito, se você estiver executando apenas uma única instrução Javascript, não precisa colocá-la em um arquivo e, em vez disso, pode 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
mas me deuJavaScript execution failed: SyntaxError: Unexpected token ILLEGAL
.Como você está fazendo isso em um terminal e deseja apenas inspecionar um registro de maneira sã, você pode usar um truque como este:
Use a sessão normalmente -
db.collection.find().pretty()
ou o que quer que você precise fazer, ignore a saída longa e saia. Uma transcrição de sua sessão estará no arquivo em que vocêtee
escreveu.Esteja ciente de que a saída pode conter sequências de escape e outro lixo devido ao shell do mongo esperar uma sessão interativa.
less
lida com isso graciosamente.fonte
Basta colocar os comandos que deseja executar em um arquivo, depois passá-los para o shell junto com o nome do banco de dados e redirecionar a saída para um arquivo. Portanto, se o seu comando find estiver
find.js
e o seu banco de dados estiverfoo
, terá a seguinte aparência:fonte
out.json
.mongo foo < find.js > out.json
funcionou.Coloque sua consulta (por exemplo
db.someCollection.find().pretty()
) em um arquivo javascript, digamosquery.js
. Em seguida, execute-o no shell do seu sistema operacional usando o comando:mongo yourDb < query.js > outputFile
O resultado da consulta estará no arquivo denominado 'outputFile'.
Por padrão, o Mongo imprime os primeiros 20 documentos IIRC. Se você quiser mais, pode definir um novo valor para o tamanho do lote no shell do Mongo, por exemplo
DBQuery.shellBatchSize = 100
.fonte
.js
extensão. Você pode escrever todas aquelas consultas de shell mongo sem alterá-las.Usando
print
eJSON.stringify
você pode simplesmente produzir um resultado válidoJSON
.Use o
--quiet
sinalizador para filtrar o ruído do shell da saída.Use
--norc
sinalizador para evitar.mongorc.js
avaliação. (Tive que fazer isso por causa de um formatador bonito que uso, que produz uma saída JSON inválida ) Use aDBQuery.shellBatchSize = ?
substituição?
pelo limite do resultado real para evitar paginação.E, finalmente, use
tee
para canalizar a saída do terminal para um arquivo:Espero que isto ajude!
fonte
Usando esta resposta de Asya Kamsky, escrevi um script de bat de uma linha para Windows. A linha se parece com esta:
mongo --quiet %1 --eval "printjson(db.%2.find().toArray())" > output.json
Então, pode-se executá-lo:
exportToJson.bat DbName CollectionName
fonte
Consegui salvar o resultado com a função writeFile () .
A versão do shell do Mongo era 4.0.9
fonte
Também há mongoexport para isso, mas não tenho certeza de qual versão está disponível.
Exemplo:
fonte
Como resposta de Neodan, mongoexport é bastante útil com
-q
opção de consulta. Ele também converteObjectId
para o formato padrão de JSON"$oid"
. Por exemplo:fonte
você pode usar este comando para alcançá-lo:
mongo admin -u <userName> -p <password> --quiet --eval "cursor = rs.status(); printjson(cursor)" > output.json
fonte