Comment exporter la collection au format CSV dans MongoDB?

Comment exportez-vous tous les enregistrements d’une collection MongoDB dans un fichier .csv ?

 mongoexport --host localhost --db dbname --collection name --type=csv > test.csv 

Cela me demande de spécifier le nom des champs que je dois exporter. Puis-je exporter tous les champs sans spécifier les noms des champs?

@ karoly-horvath a raison. Les champs sont obligatoires pour csv.

En fonction de ce bogue dans le tracker de problème de MongoDB, https://jira.mongodb.org/browse/SERVER-4224, vous DEVEZ fournir les champs lors de l’exportation vers un fichier CSV . Les documents ne sont pas clairs. C’est la raison de l’erreur.

Essaye ça:

 mongoexport --host localhost --db dbname --collection name --csv --out text.csv --fields firstName,middleName,lastName 

METTRE À JOUR:

Ce commit: https://github.com/mongodb/mongo-tools/commit/586c00ef09c32c77907bd20d722049ed23065398 corrige les documents pour 3.0.0-rc10 et versions ultérieures. Ça change

 Fields ssortingng `long:"fields" short:"f" description:"comma separated list of field names, eg -f name,age"` 

à

 Fields ssortingng `long:"fields" short:"f" description:"comma separated list of field names (required for exporting CSV) eg -f \"name,age\" "` 

De plus, vous n’êtes pas autorisé entre les espaces entre les noms de champs séparés par des virgules.

MAUVAIS: -f firstname, lastname

BON: -f firstname,lastname

 mongoexport --help .... -f [ --fields ] arg comma separated list of field names eg -f name,age --fieldFile arg file with fields names - 1 per line 

Vous devez le spécifier manuellement et si vous y réfléchissez, cela est parfaitement logique. MongoDB est sans schemaless; CSV, par contre, a une disposition fixe pour les colonnes. Sans savoir quels champs sont utilisés dans différents documents, il est impossible de sortir le vidage CSV.

Si vous avez un schéma fixe, vous pourriez peut-être récupérer un document, en extraire les noms de champs avec un script et les transmettre à mongoexport.

Si vous le souhaitez, vous pouvez exporter toutes les collections vers csv sans spécifier --fields (exportera tous les champs).

De http://drzon.net/export-mongodb-collections-to-csv-without-specifying-fields/ exécutez ce script bash

 OIFS=$IFS; IFS=","; # fill in your details here dbname=DBNAME user=USERNAME pass=PASSWORD host=HOSTNAME:PORT # first get all collections in the database collections=`mongo "$host/$dbname" -u $user -p $pass --eval "rs.slaveOk();db.getCollectionNames();"`; collections=`mongo $dbname --eval "rs.slaveOk();db.getCollectionNames();"`; collectionArray=($collections); # for each collection for ((i=0; i<${#collectionArray[@]}; ++i)); do echo 'exporting collection' ${collectionArray[$i]} # get comma separated list of keys. do this by peeking into the first document in the collection and get his set of keys keys=`mongo "$host/$dbname" -u $user -p $pass --eval "rs.slaveOk();var keys = []; for(var key in db.${collectionArray[$i]}.find().sort({_id: -1}).limit(1)[0]) { keys.push(key); }; keys;" --quiet`; # now use mongoexport with the set of keys to export the collection to csv mongoexport --host $host -u $user -p $pass -d $dbname -c ${collectionArray[$i]} --fields "$keys" --csv --out $dbname.${collectionArray[$i]}.csv; done IFS=$OIFS; 

Je n’ai pas pu obtenir mongoexport pour faire ça pour moi. J’ai trouvé que, pour obtenir une liste exhaustive de tous les champs, vous devez parcourir l’ensemble de la collection une fois. Utilisez ceci pour générer les en-têtes. Ensuite, parcourez à nouveau la collection pour remplir ces en-têtes pour chaque document.

J’ai écrit un script pour faire exactement cela. Conversion de documents MongoDB en CSV indépendamment des différences de schéma entre les documents individuels.

https://github.com/surya-shodan/mongoexportcsv

De même, si vous souhaitez exporter des champs json internes, utilisez dot (. Operator).

Enregistrement JSON:

 { "_id" : "00118685076F2C77", "value" : { "userIds" : [ "u1" ], "deviceId" : "dev" } 

Commande mongoexport avec opérateur point (en utilisant la version 3.4.7 de mongo):

./mongoexport –host localhost –db myDB –collection myColl –type = csv –out out.csv –fields value.deviceId, value.userIds

Csv de sortie:

 value.deviceId,value.userIds d1,"[""u1""]" d2,"[""u2""]" 

Remarque: assurez-vous de ne pas exporter un tableau. Cela corromprait le format CSV comme les champs userIds indiqués ci-dessus

La commande ci-dessous est utilisée pour exporter la collection vers csv formate Remarque: naag est la firebase database, employee1_json est la collection

mongoexport –db naag – collection employee1_json –type csv –out / home / orienit / work / mongodb / employee1_csv_op1