Skalet ger några trevliga men dolda funktioner eftersom det är en interaktiv miljö.
När du kör kommandon från en javascript-fil via mongo commands.js får du inte helt identiskt beteende.
Det finns två sätt att komma runt detta.
(1) fejka ut skalet och få det att tro att du är i interaktivt läge
$ mongo dbname << EOF > output.json
db.collection.find().pretty()
EOF
eller
(2) använd Javascript för att översätta resultatet av en find()
till en utskrivbar JSON
mongo dbname command.js > output.json
där command.js innehåller detta (eller motsvarande):
printjson( db.collection.find().toArray() )
Detta kommer att skriva ut mängden resultat, inklusive [ ]
- om du inte vill det kan du iterera över arrayen och printjson()
varje element.
Förresten, om du bara kör en enda Javascript-sats behöver du inte lägga den i en fil utan istället kan du använda:
$ mongo --quiet dbname --eval 'printjson(db.collection.find().toArray())' > output.json