with type query collection and mongodb csv schemaless database

type - ¿Cómo exportar la colección a CSV en MongoDB?



mongoexport strict mode (7)

¿Cómo se exportan todos los registros en una colección MongoDB a un archivo .csv ?

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

Esto me pide que especifique el nombre de los campos que necesito exportar. ¿Puedo exportar todos los campos sin especificar los nombres de los campos?


@ karoly-horvath tiene razón. Se requieren campos para csv.

De acuerdo con este error en el rastreador de problemas MongoDB https://jira.mongodb.org/browse/SERVER-4224 DEBE proporcionar los campos al exportar a un csv . Los documentos no son claros en eso. Esa es la razón del error.

Prueba esto:

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

ACTUALIZAR:

Este compromiso: https://github.com/mongodb/mongo-tools/commit/586c00ef09c32c77907bd20d722049ed23065398 arregla los documentos para 3.0.0-rc10 y posterior. Cambia

Fields string `long:"fields" short:"f" description:"comma separated list of field names, e.g. -f name,age"`

a

Fields string `long:"fields" short:"f" description:"comma separated list of field names (required for exporting CSV) e.g. -f /"name,age/" "`


Además, no se permiten espacios entre los nombres de campo separados por comas.

MALO: -f firstname, lastname

BUENO: -f firstname,lastname


Además, si desea exportar campos json internos, use dot (. Operator).

Registro JSON:

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

comando mongoexport con operador de punto (utilizando mongo versión 3.4.7):

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

Salida csv:

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

Nota: asegúrese de no exportar una matriz. Corrompería el formato CSV como los ID de usuario de campo que se muestran arriba


Debajo del comando usado para exportar la colección al formato csv Nota: naag es base de datos, employee1_json es colección

mongoexport --db naag - colección employee1_json --type csv --out / home / orienit / work / mongodb / employee1_csv_op1


No pude hacer que mongoexport haga esto por mí. Descubrí que, para obtener una lista exhaustiva de todos los campos, necesita recorrer toda la colección una vez. Use esto para generar los encabezados. A continuación, vuelva a recorrer la colección para completar estos encabezados para cada documento.

He escrito un guion para hacer solo esto. Conversión de documentos MongoDB a csv independientemente de las diferencias de esquema entre documentos individuales.

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


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

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


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

Tienes que especificarlo manualmente y si lo piensas bien, tiene mucho sentido. MongoDB no tiene esquemas; CSV, por otro lado, tiene un diseño fijo para columnas. Sin saber qué campos se usan en diferentes documentos, es imposible generar el volcado CSV.

Si tiene un esquema fijo, quizás pueda recuperar un documento, coseche los nombres de campo con un script y páselo a mongoexport.