mongoexport aggregate export to a csv file
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()
You can export to a CSV file with the following 3 steps:
-
Assign your aggregation results to a variable (reference):
var result = db.compras.aggregate({ $group : { _id : "$data.proponente", total : { $sum : "$price" } }}
-
Insert a value of the variable to a new collection:
db.bar.insert(result.toArray());
-
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 :)
You can't run aggregate() queries through mongoexport
. The mongoexport
tool is intended for more basic data export with a query filter rather than full aggregation and data processing. You could easily write a short script using your favourite language driver for MongoDB, though.
If you don't want to store the results in a collection, you could also write directly to a CSV file from JavaScript using the print function. Save the following script to a file like exportCompras.js.
let cursor = db.compras.aggregate({ $group :
{ _id : "$data.proponente",
total : { $sum : "$price" }
}
});
if (cursor && cursor.hasNext()) {
//header
print('proponente,total');
cursor.forEach(item => {
print('"' + item._id + '",' + item.total);
// printjson(item); -- if you need JSON
});
}
From the command line, call >mongo server/collection exportCompras.js > comprasResults.csv --quiet
Updated from @M.Justin's comment to replace the previous while loop.