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