web-dev-qa-db-ger.com

Wie exportiere ich eine Sammlung nach CSV in MongoDB?

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?

76
Succeed Stha

@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
84
campeterson

Zwischen den durch Kommas getrennten Feldnamen sind keine Leerzeichen zulässig.

BAD: -f firstname, lastname

GUT: -f firstname,lastname

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

25
Karoly Horvath

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;
8
Michael

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.

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

2

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
0
Naag

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  

0