Powłoka zapewnia kilka ładnych, ale ukrytych funkcji, ponieważ jest środowiskiem interaktywnym.
Kiedy uruchamiasz polecenia z pliku javascript za pośrednictwem mongo commands.js, nie uzyskasz całkiem identycznego zachowania.
Można to obejść na dwa sposoby.
(1) sfałszować powłokę i sprawić, by myślała, że jesteś w trybie interaktywnym
$ mongo dbname << EOF > output.json
db.collection.find().pretty()
EOF
lub
(2) użyj Javascript do przetłumaczenia wyniku find()
w drukowalny JSON
mongo dbname command.js > output.json
gdzie command.js zawiera to (lub jego odpowiednik):
printjson( db.collection.find().toArray() )
Spowoduje to wyświetlenie tablicy wyników, w tym [ ]
- jeśli nie chcesz, możesz iterować po tablicy i printjson()
każdy element.
Przy okazji, jeśli używasz tylko jednej instrukcji JavaScript, nie musisz umieszczać jej w pliku, a zamiast tego możesz użyć:
$ mongo --quiet dbname --eval 'printjson(db.collection.find().toArray())' > output.json