O shell fornece alguns recursos interessantes, mas ocultos, porque é um ambiente interativo.
Quando você executa comandos de um arquivo javascript por meio de comandos mongo.js, você não obtém um comportamento exatamente 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) use 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 a matriz 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 precisará colocá-la em um arquivo e, em vez disso, poderá usar:
$ mongo --quiet dbname --eval 'printjson(db.collection.find().toArray())' > output.json