Le shell fournit des fonctionnalités intéressantes mais cachées car il s'agit d'un environnement interactif.
Lorsque vous exécutez des commandes à partir d'un fichier javascript via mongo command.js, vous n'obtiendrez pas un comportement tout à fait identique.
Il y a deux façons de contourner cela.
(1) simulez le shell et faites-lui croire que vous êtes en mode interactif
$ mongo dbname << EOF > output.json
db.collection.find().pretty()
EOF
ou
(2) utiliser Javascript pour traduire le résultat d'un find()
dans un JSON imprimable
mongo dbname command.js > output.json
où command.js contient ceci (ou son équivalent) :
printjson( db.collection.find().toArray() )
Cela imprimera joliment le tableau des résultats, y compris [ ]
- si vous ne le souhaitez pas, vous pouvez parcourir le tableau et printjson()
chaque élément.
Au fait, si vous n'exécutez qu'une seule instruction Javascript, vous n'avez pas besoin de la mettre dans un fichier et à la place, vous pouvez utiliser :
$ mongo --quiet dbname --eval 'printjson(db.collection.find().toArray())' > output.json