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.
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