La shell fornisce alcune caratteristiche belle ma nascoste perché è un ambiente interattivo.
Quando esegui comandi da un file javascript tramite mongo command.js, non otterrai un comportamento del tutto identico.
Ci sono due modi per aggirare questo problema.
(1) falsificare la shell e far credere di essere in modalità interattiva
$ mongo dbname << EOF > output.json
db.collection.find().pretty()
EOF
oppure
(2) usa Javascript per tradurre il risultato di un find()
in un JSON stampabile
mongo dbname command.js > output.json
dove command.js contiene questo (o il suo equivalente):
printjson( db.collection.find().toArray() )
Questo stamperà abbastanza l'array di risultati, incluso [ ]
- se non lo vuoi puoi scorrere l'array e printjson()
ogni elemento.
A proposito, se stai eseguendo solo una singola istruzione Javascript non devi inserirla in un file e invece puoi usare:
$ mongo --quiet dbname --eval 'printjson(db.collection.find().toArray())' > output.json