Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

mongoexport aggregate export to a csv file

I want to save the result from an aggregation into a csv file.

Using the mongo cmd line tool I can do this to get the results I want:

db.compras.aggregate({ $group : { _id : "$data.proponente", total : { $sum : "$price" } }} 

How would I translate this into a mongoexport command that saves results into a csv?

like image 474
Baconator507 Avatar asked May 09 '13 18:05

Baconator507


2 Answers

Slightly simpler option as of 2.6+ is to now add an $out step to your aggregate to put the results into a collection:

db.collection.aggregate( [ { aggregation steps... }, { $out : "results" } ] ) 

Then just use mongoexport as:

mongoexport -d database -c results -f field1,field2,etc --csv > results.csv 

After that you might want to delete the temporary collection from the database so that it does not keep using unnecessary resources, and also to avoid confusion later, when you have forgotten why this collection exists in your database.

db.results.drop() 
like image 179
Matt Avatar answered Sep 28 '22 05:09

Matt


You can export to a CSV file with the following 3 steps:

  1. Assign your aggregation results to a variable (reference):

    var result = db.compras.aggregate({ $group : { _id : "$data.proponente", total : { $sum : "$price" } }} 
  2. Insert a value of the variable to a new collection:

    db.bar.insert(result.toArray()); 
  3. In terminal (or command line) export this bar collection to a CSV file:

    mongoexport -d yourdbname -c bar -f _id,total --csv > results.csv 

...and you're done :)

like image 36
Askar Avatar answered Sep 28 '22 04:09

Askar