Wie exportieren Sie alle Datensätze in einer MongoDB-Sammlung in eine .csv
-Datei?
mongoexport --Host localhost --db dbname --collection name --type=csv > test.csv
Dies fordert mich auf, den Namen der Felder anzugeben, die ich exportieren muss. Kann ich einfach alle Felder exportieren, ohne die Namen der Felder anzugeben?
@karoly-horvath hat es richtig. Felder sind für CSV erforderlich.
Gemäß diesem Fehler im MongoDB-Issue-Tracker https://jira.mongodb.org/browse/SERVER-4224MÜSSEN Sie die Felder angeben, wenn Sie in eine CSV-Datei exportieren. Die Dokumente sind nicht klar. Das ist der Grund für den Fehler.
Versuche dies:
mongoexport --Host localhost --db dbname --collection name --csv --out text.csv --fields firstName,middleName,lastName
UPDATE:
Dieses Commit: https://github.com/mongodb/mongo-tools/commit/586c00ef09c32c77907bd20d722049ed23065398 behebt die Dokumente für 3.0.0-rc10 und höher. Es ändert
Fields string `long:"fields" short:"f" description:"comma separated list of field names, e.g. -f name,age"`
zu
Fields string `long:"fields" short:"f" description:"comma separated list of field names (required for exporting CSV) e.g. -f \"name,age\" "`
VERSION 3.0 UND OBEN:
Sie sollten ---type=csv
anstelle von --csv
verwenden, da es veraltet ist.
Weitere Informationen: https://docs.mongodb.com/manual/reference/program/mongoexport/#export-in-csv-format
Vollständiger Befehl:
mongoexport --Host localhost --db dbname --collection name --type=csv --out text.csv --fields firstName,middleName,lastName
Zwischen den durch Kommas getrennten Feldnamen sind keine Leerzeichen zulässig.
BAD: -f firstname, lastname
GUT: -f firstname,lastname
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
Sie müssen es manuell angeben, und wenn Sie darüber nachdenken, ist es absolut sinnvoll. MongoDB ist planlos; CSV hingegen hat ein festes Layout für Spalten. Ohne zu wissen, welche Felder in verschiedenen Dokumenten verwendet werden, kann der CSV-Speicherauszug nicht ausgegeben werden.
Wenn Sie ein festes Schema haben, können Sie vielleicht ein Dokument abrufen, die Feldnamen mit einem Skript daraus sammeln und an mongoexport übergeben.
Wenn Sie möchten, können Sie alle Sammlungen nach csv exportieren, ohne --fields
anzugeben (alle Felder werden exportiert).
Von http://drzon.net/export-mongodb-collections-to-csv-without-specifying-fields/ führen Sie dieses Bash-Skript aus
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;
Ich konnte Mongoexport nicht dazu bringen, das für mich zu tun. Ich habe festgestellt, dass Sie die gesamte Sammlung einmal durchlaufen müssen, um eine vollständige Liste aller Felder zu erhalten. Verwenden Sie dies, um die Header zu generieren. Führen Sie die Schleife erneut durch, um diese Kopfzeilen für jedes Dokument aufzufüllen.
Ich habe ein Skript geschrieben, um genau dies zu tun. Konvertieren von MongoDB-Dokumenten in csv unabhängig von Schemaunterschieden zwischen einzelnen Dokumenten.
Der folgende Befehl dient zum Exportieren der Sammlung in das CSV-Format.
Hinweis: naag
ist Datenbank, employee1_json
ist eine Sammlung.
mongoexport --db naag--collection employee1_json --type csv --out /home/orienit/work/mongodb/employee1_csv_op1
Wenn Sie innere Json-Felder exportieren möchten, verwenden Sie den Punkt (. Operator).
JSON-Datensatz:
{
"_id" : "00118685076F2C77",
"value" : {
"userIds" : [
"u1"
],
"deviceId" : "dev"
}
Befehl mongoexport mit Punktoperator (unter Verwendung der Mongo-Version 3.4.7):
./mongoexport --Host localhost --db myDB --collection myColl --type = csv --out out.csv --fields value.deviceId, value.userIds
Ausgabe csv:
value.deviceId,value.userIds
d1,"[""u1""]"
d2,"[""u2""]"
Hinweis: Stellen Sie sicher, dass Sie kein Array exportieren. Es würde das CSV-Format wie oben gezeigte Feldbenutzer-IDs beschädigen