18 votos

cómo cobranzas de exportación a csv en mongodb

¿Cómo se puede exportar todos los registros en un mongodb colección a un archivo csv ?

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

Este me pide especificar el nombre de los campos que necesito para exportar. ¿Sólo se puede exportar todos los campos, sin especificar los nombres de los campos?

15voto

Karoly Horvath Puntos 45145
mongoexport  --help
....
-f [ --fields ] arg     comma separated list of field names e.g. -f name,age
--fieldFile arg         file with fields names - 1 per line

Usted tiene que especificar manualmente y si lo piensas, tiene sentido perfecto. MongoDB es schemaless, CVS, por otro lado, tiene un diseño fijo para las columnas. Sin saber en qué campos se utilizan en diferentes documentos, es imposible para la salida de los CVS de volcado.

Si usted tiene un esquema fijo tal vez usted podría recuperar un documento, la cosecha de los nombres de campo con una secuencia de comandos y se pasa a mongoexport.

11voto

campeterson Puntos 515

@karoly-horvath tiene derecho. Los campos son necesarios para la csv.

De acuerdo a este error en la MongoDB issue tracker https://jira.mongodb.org/browse/SERVER-4224 usted DEBE proporcionar a los campos a la hora de exportar a un archivo csv. Los documentos no están claras. Esa es la razón para el error.

Intente esto:

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

9voto

murphsp1 Puntos 99

También, no se permiten espacios entre separada por comas de nombres de campo.

MALO: -f firstname, lastname

BUENO: -f firstname,lastname

3voto

Michael Puntos 3132

Si lo desea, puede exportar todas las colecciones a csv sin especificar --fields (exportar todos los campos).

De http://drzon.net/export-mongodb-collections-to-csv-without-specifying-fields/ ejecutar este script en 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;

0voto

Stack Man Puntos 33

Puedes subir la mongodb colección:

json-csv.com

y va a proporcionar una buena conversión de CSV sin preguntar por los nombres de campo.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X