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 haz que crea 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 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, incluido [ ]
- si no quiere eso, puede iterar sobre la matriz y 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