mongodb - importar - mongoexport query to csv
Exportación agregada de mongoexport a un archivo csv (5)
La opción un poco más simple a partir de la versión 2.6+ es agregar ahora un paso $ out a su agregado para colocar los resultados en una colección:
db.collection.aggregate( [ { aggregation steps... }, { $out : "results" } ] )
Luego solo usa mongoexport
mongoexport -d database -c results -f field1,field2,etc --csv > results.csv
Después de eso, es posible que desee eliminar la colección temporal de la base de datos, para que no siga utilizando recursos innecesarios y también para evitar confusiones más adelante, cuando haya olvidado por qué existe esta colección en su base de datos.
db.results.drop()
Quiero guardar el resultado de una agregación en un archivo csv.
Usando la herramienta de línea cmd de mongo, puedo hacer esto para obtener los resultados que quiero:
db.compras.aggregate({ $group : { _id : "$data.proponente", total : { $sum : "$price" } }}
¿Cómo traduciría esto en un comando mongoexport que guarda los resultados en un csv?
No puede ejecutar consultas aggregate() través de mongoexport
. La herramienta mongoexport
está diseñada para una exportación de datos más básica con un filtro de consulta en lugar de la agregación completa y el procesamiento de datos. Sin embargo, podría escribir fácilmente un script corto con su controlador de idioma favorito para MongoDB.
Puede exportar a un archivo CSV con los siguientes 3 pasos:
Asigne sus resultados de agregación a una variable ( reference ):
var result = db.compras.aggregate({ $group : { _id : "$data.proponente", total : { $sum : "$price" } }}
Inserte un valor de la variable en una nueva colección:
db.bar.insert(result.result);
En el terminal (o línea de comando), exporte esta colección de barras a un archivo CSV:
mongoexport -d yourdbname -c bar -f _id,total --csv > results.csv
...y tu estas listo :)
Si no desea almacenar los resultados en una colección, también puede escribir directamente en un archivo CSV desde JavaScript mediante la función de impresión. Guarde la siguiente secuencia de comandos en un archivo como exportCompras.js.
var cursor = db.compras.aggregate({ $group :
{ _id : "$data.proponente",
total : { $sum : "$price" }
}
});
if (cursor && cursor.hasNext()) {
//header
print(''proponente,total'');
while ( cursor.hasNext() ) {
var item = cursor.next();
print(''"'' + item._id + ''",'' + item.total);
//printjson(cursor.next()); -- or if you prefer the JSON
}
}
Desde la línea de comandos, llame
servidor mongo / colección exportCompras.js> comprasResults.csv --quiet
Tome lo siguiente y guárdelo en el servidor mongo en algún lugar:
// Export to CSV function
DBCommandCursor.prototype.toCsv = function(deliminator, textQualifier)
{
var count = -1;
var headers = [];
var data = {};
deliminator = deliminator == null ? '','' : deliminator;
textQualifier = textQualifier == null ? ''/"'' : textQualifier;
var cursor = this;
while (cursor.hasNext()) {
var array = new Array(cursor.next());
count++;
for (var index in array[0]) {
if (headers.indexOf(index) == -1) {
headers.push(index);
}
}
for (var i = 0; i < array.length; i++) {
for (var index in array[i]) {
data[count + ''_'' + index] = array[i][index];
}
}
}
var line = '''';
for (var index in headers) {
line += textQualifier + headers[index] + textQualifier + deliminator;
}
line = line.slice(0, -1);
print(line);
for (var i = 0; i < count + 1; i++) {
var line = '''';
var cell = '''';
for (var j = 0; j < headers.length; j++) {
cell = data[i + ''_'' + headers[j]];
if (cell == undefined) cell = '''';
line += textQualifier + cell + textQualifier + deliminator;
}
line = line.slice(0, -1);
print(line);
}
}
Luego puedes ejecutar los siguientes comandos a través del shell o una GUI como Robomongo:
load(''C://path//to//your//saved//js//file'')
db.compras.aggregate({ $group : { _id : "$data.proponente", total : { $sum : "$price" } }}.toCsv();