Redirect output of mongo query to a csv file

后端 未结 7 751
隐瞒了意图╮
隐瞒了意图╮ 2020-12-02 06:01

I am using MongoDB 2.2.2 for 32-bit Windows7 machine. I have a complex aggregation query in a .js file. I need to execute this file on the shell and direct the output to a C

相关标签:
7条回答
  • 2020-12-02 06:25

    Mongo's in-built export is working fine, unless you want to any data manipulation like format date, covert data types etc.

    Following command works as charm.

        mongoexport -h localhost -d databse -c collection --type=csv 
        --fields erpNum,orderId,time,status 
        -q '{"time":{"$gt":1438275600000}, "status":{"$ne" :"Cancelled"}}' 
        --out report.csv
    
    0 讨论(0)
  • 2020-12-02 06:36

    I know this question is old but I spend an hour trying to export a complex query to csv and I wanted to share my thoughts. First I couldn't get any of the json to csv converters to work (although this one looked promising). What I ended up doing was manually writing the csv file in my mongo script.

    This is a simple version but essentially what I did:

    print("name,id,email");
    db.User.find().forEach(function(user){
      print(user.name+","+user._id.valueOf()+","+user.email);
    });
    

    This I just piped the query to stdout

    mongo test export.js > out.csv
    

    where test is the name of the database I use.

    0 讨论(0)
  • 2020-12-02 06:37

    Just weighing in here with a nice solution I have been using. This is similar to Lucky Soni's solution above in that it supports aggregation, but doesn't require hard coding of the field names.

    cursor = db.<collection_name>.<my_query_with_aggregation>;
    
    headerPrinted = false;
    while (cursor.hasNext()) {
        item = cursor.next();
        
        if (!headerPrinted) {
            print(Object.keys(item).join(','));
            headerPrinted = true;
        }
    
        line = Object
            .keys(item)
            .map(function(prop) {
                return '"' + item[prop] + '"';
            })
            .join(',');
        print(line);
    }
    

    Save this as a .js file, in this case we'll call it example.js and run it with the mongo command line like so:

    mongo <database_name> example.js --quiet > example.csv
    
    0 讨论(0)
  • 2020-12-02 06:44

    Here is what you can try:

    print("id,name,startDate")
    cursor = db.<collection_name>.find();
    while (cursor.hasNext()) {
        jsonObject = cursor.next();
        print(jsonObject._id.valueOf() + "," + jsonObject.name + ",\"" + jsonObject.stateDate.toUTCString() +"\"")
    
    }
    

    Save that in a file, say "export.js". Run the following command:

    mongo <host>/<dbname> -u <username> -p <password> export.js > out.csv
    
    0 讨论(0)
  • 2020-12-02 06:46

    I use the following technique. It makes it easy to keep the column names in sync with the content:

    var cursor = db.getCollection('Employees.Details').find({})
    
    var header = []
    var rows = []
    
    var firstRow = true
    cursor.forEach((doc) => 
    {
        var cells = []
        
        if (firstRow) header.push("employee_number")
        cells.push(doc.EmpNum.valueOf())
    
        if (firstRow) header.push("name")
        cells.push(doc.FullName.valueOf())    
    
        if (firstRow) header.push("dob")
        cells.push(doc.DateOfBirth.valueOf())   
        
        row = cells.join(',')
        rows.push(row)    
    
        firstRow =  false
    })
    
    print(header.join(','))
    print(rows.join('\n'))
    
    0 讨论(0)
  • 2020-12-02 06:47

    Have a look at this

    for outputing from mongo shell to file. There is no support for outputing csv from mongos shell. You would have to write the javascript yourself or use one of the many converters available. Google "convert json to csv" for example.

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