with type query mongo collection and mongodb mongodb-.net-driver mongodb-query

mongodb - type - mongoexport strict mode



Redirigir el resultado de la consulta de mongo a un archivo csv (5)

Ampliando otras respuestas:

Encontré la respuesta de @Geverding más flexible. También funciona con agregación:

test_db.js

print("name,email"); db.users.aggregate([ { $match: {} } ]).forEach(function(user) { print(user.name+","+user.email); } });

Ejecute el siguiente comando para exportar resultados:

mongo test_db < ./test_db.js >> ./test_db.csv

Desafortunadamente, agrega texto adicional al archivo CSV que requiere procesar el archivo antes de que podamos usarlo:

MongoDB shell version: 3.2.10 connecting to: test_db

Pero podemos hacer que mongo shell deje de escupir esos comentarios y solo imprimir lo que hemos pedido pasando la bandera --quiet

mongo --quiet test_db < ./test_db.js >> ./test_db.csv

Estoy usando MongoDB 2.2.2 para la máquina Windows7 de 32 bits. Tengo una consulta de agregación compleja en un archivo .js. Necesito ejecutar este archivo en el shell y dirigir el resultado a un archivo CSV. Me aseguro de que la consulta devuelva un json "plano" (sin claves anidadas), por lo que es intrínsecamente convertible en un csv ordenado.

Sé acerca de load() y eval() . eval() me exige pegar toda la consulta en el shell y solo permite printjson() dentro del script, mientras necesito csv. Y, la segunda manera: load() .. Imprime la salida en la pantalla, y de nuevo en formato json.

¿Hay alguna manera de que Mongo pueda hacer esta conversión de json a csv? (Necesito un archivo csv para preparar cuadros sobre los datos). Estoy pensando:

1. O mongo tiene un comando incorporado para esto que no puedo encontrar ahora.
2. Mongo no puede hacerlo por mí; A lo sumo puedo enviar la salida json a un archivo que luego necesito convertir a csv.
3. Mongo puede enviar la salida json a una colección temporal, cuyo contenido puede mongoexported fácilmente al formato csv. Pero creo que solo las consultas de reducción de mapas admiten colecciones de salida. ¿Está bien? Lo necesito para una consulta de agregación.

Gracias por cualquier ayuda :)


Eche un vistazo a this

para la salida de mongo shell a archivo. No hay soporte para la salida de csv desde mongos shell. Debería escribir el javascript usted mismo o usar uno de los muchos convertidores disponibles. Google "convertir json a csv", por ejemplo.


Esto es lo que puedes probar:

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

Guárdalo en un archivo, di "export.js". Ejecute el siguiente comando:

mongo <host>/<dbname> -u <username> -p <password> export.js > out.csv


La exportación integrada de Mongo funciona bien, a menos que desee cualquier manipulación de datos como la fecha de formateo, los tipos de datos encubiertos, etc.

El siguiente comando funciona como encanto.

mongoexport -h localhost -d databse -c collection --csv --fields erpNum,orderId,time,status -q ''{"time":{"$gt":1438275600000}, "status":{"$ne" :"Cancelled"}}'' --out report.csv


Sé que esta pregunta es antigua pero paso una hora tratando de exportar una consulta compleja a csv y quería compartir mis pensamientos. Primero, no pude conseguir que alguno de los conversores JSON to CSV funcionara (aunque this parecía prometedor). Lo que terminé haciendo fue escribir manualmente el archivo csv en mi script mongo.

Esta es una versión simple pero esencialmente lo que hice:

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

Esto acabo de canalizar la consulta a stdout

mongo test export.js > out.csv

donde test es el nombre de la base de datos que uso.