How to export collection to CSV in MongoDB?

前端 未结 11 1542
刺人心
刺人心 2020-12-12 11:52

How do you export all the records in a MongoDB collection to a .csv file?

mongoexport --host localhost --db dbname --collection name --type=csv          


        
相关标签:
11条回答
  • 2020-12-12 12:01

    I could not get mongoexport to do this for me. I found that,to get an exhaustive list of all the fields, you need to loop through the entire collection once. Use this to generate the headers. Then loop through the collection again to populate these headers for each document.

    I've written a script to do just this. Converting MongoDB docs to csv irrespective of schema differences between individual documents.

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

    0 讨论(0)
  • 2020-12-12 12:07

    If you want, you can export all collections to csv without specifying --fields (will export all fields).

    From http://drzon.net/export-mongodb-collections-to-csv-without-specifying-fields/ run this bash script

    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;
    
    0 讨论(0)
  • 2020-12-12 12:12

    This working for me Try it

    mongoexport --host cluster0-shard-dummy-link.mongodb.net:27017 --db yourdbname --forceTableScan   --collection users --type json --out /var/www/html/user.json --authenticationDatabase admin --ssl --username Yourusername --password Yourpassword
    

    Above cmd return whole data of the users collection if you want filter field then add --fields=email,name

    0 讨论(0)
  • 2020-12-12 12:13

    works for me remoting to a docker container with mongo:4.2.6

    mongoexport -h mongodb:27017 --authenticationDatabase=admin -u username -p password -d database -c collection -q {"created_date": { "$gte": { "$date": "2020-08-03T00:00:00.000Z" }, "$lt": { "$date": "2020-08-09T23:59:59.999Z" } } } --fields=somefield1,somefield2 --type=csv --out=/archive.csv
    
    0 讨论(0)
  • 2020-12-12 12:14

    Solution for MongoDB Atlas users!

    Add the --fields parameter as comma separated field names enclosed in double inverted quotes:

    --fields "<FIELD 1>,<FIELD 2>..."
    

    This is complete example:

    mongoexport --host Cluster0-shard-0/shard1URL.mongodb.net:27017,shard2URL.mongodb.net:27017,shard3URL.mongodb.net:27017 --ssl --username <USERNAME> --password <PASSWORD> --authenticationDatabase admin --db <DB NAME> --collection <COLLECTION NAME> --type <OUTPUT FILE TYPE> --out <OUTPUT FILE NAME> --fields "<FIELD 1>,<FIELD 2>..."
    
    0 讨论(0)
  • 2020-12-12 12:17
    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
    

    You have to manually specify it and if you think about it, it makes perfect sense. MongoDB is schemaless; CSV, on the other hand, has a fixed layout for columns. Without knowing what fields are used in different documents it's impossible to output the CSV dump.

    If you have a fixed schema perhaps you could retrieve one document, harvest the field names from it with a script and pass it to mongoexport.

    0 讨论(0)
提交回复
热议问题