将mongo查询的输出redirect到一个csv文件
我正在使用MongoDB 2.2.2的32位Windows7机器。 我在.js文件中有一个复杂的聚合查询。 我需要在shell上执行这个文件并将输出指向一个CSV文件。 我确保查询返回一个“扁平”的JSON(没有嵌套键),所以它本质上可以转换成一个整洁的CSV。
 我知道load()和eval() 。  eval()要求我将整个查询粘贴到shell中,并且只允许脚本中的printjson() ,而我需要csv。 第二种方法: load() ..它将输出显示在屏幕上,再以json格式显示。 
有没有一种方法可以做Mongo从json到csv的转换? (我需要csv文件来准备数据图表)。 我在想:
  mongo有一个内置的命令,我现在找不到。 
  2.蒙戈不能为我做; 我最多可以发送json输出到一个文件,然后我需要转换为csv我自己。 
  3. Mongo可以发送json输出到一个临时的集合,其中的内容可以很容易地mongoexported为csv格式。 但我认为只有map-reduce查询支持输出集合。 是对的吗? 我需要它的聚合查询。 
谢谢你的帮助 :)
我知道这个问题是旧的,但我花了一个小时试图导出一个复杂的查询CSV文件,我想分享我的想法。 首先,我无法获得任何json到csv转换器的工作(虽然这看起来很有希望)。 我最终做的是在我的mongo脚本中手动编写csv文件。
这是一个简单的版本,但基本上是我所做的:
 print("name,id,email"); db.User.find().forEach(function(user){ print(user.name+","+user._id.valueOf()+","+user.email); }); 
这只是pipe道查询到标准输出
 mongo test export.js > out.csv 
 其中test是我使用的数据库的名称。 
Mongo的内置导出工作正常,除非你想要格式化date,隐藏数据types等任何数据操作。
以下命令作为魅力。
 mongoexport -h localhost -d databse -c collection --csv --fields erpNum,orderId,time,status -q '{"time":{"$gt":1438275600000}, "status":{"$ne" :"Cancelled"}}' --out report.csv 
看看这个
用于从mongo shell输出到文件。 不支持从mongos shell输出csv。 你将不得不自己写javascript或使用许多转换器之一。 例如,Google“将json转换为csv”。
这里是你可以尝试的:
 print("id,name,startDate") cursor = db.<collection_name>.find(); while (cursor.hasNext()) { jsonObject = cursor.next(); print(jsonObject._id.valueOf() + "," + jsonObject.name + ",\"" + jsonObject.stateDate.toUTCString() +"\"") } 
保存在一个文件中,说“export.js”。 运行以下命令:
 mongo <host>/<dbname> -u <username> -p <password> export.js > out.csv 
扩展其他答案:
我发现@ GEverding的答案最为灵活。 它也适用于聚合:
test_db.js
 print("name,email"); db.users.aggregate([ { $match: {} } ]).forEach(function(user) { print(user.name+","+user.email); } }); 
执行以下命令来导出结果:
 mongo test_db < ./test_db.js >> ./test_db.csv 
不幸的是,它添加了额外的文本到CSV文件,这需要处理文件,然后才能使用它:
 MongoDB shell version: 3.2.10 connecting to: test_db 
 但是我们可以让mongo shell停止吐出这些评论,只打印我们通过传递--quiet标志所要求的内容 
 mongo --quiet test_db < ./test_db.js >> ./test_db.csv